1

我对 Pentaho 很陌生,所以我的查询可能听起来很新手。

我编写了一个转换,其中使用 CSV 文件输入步骤和表格输入步骤。我遵循的步骤:

  1. 最初,我在转换属性中创建了一个参数。参数birthdate 没有设置任何默认值。

  2. 我在表输入步骤中的 postgresql 查询中使用了这个参数,方法如下:

    select * from person where EXTRACT(YEAR FROM birthdate) > ${birthdate};
    
  3. 我正在使用 CSV 文件输入步骤读取 CSV 文件。如何将 CSV 文件中存在的生日值分配给我在转换中创建的参数?

    (或者)

  4. 您能否指导我在不使用参数的情况下将 CSV 字段值直接分配给表输入步骤中使用的 SQL 查询的过程?
4

2 回答 2

-1

TLDR;

我建议使用下面我的第三个建议中的“数据库连接”步骤。

请参阅最后一张图片以供参考

第一个想法 - 按照最初的要求使用表格输入

好吧,您不需要任何参数,除非您在要求运行转换时提供该参数的值。如果您需要从 CSV 读取数据,您可以使用这种方法。

  • 首先,阅读您的 CSV 文件并确保您的行正常。
  • 之后,使用选择值仅保留要用作参数的列。
  • 在表输入中,使用占位符 (?) 来确定数据的放置位置,并要求它针对从源步骤接收到的每一行运行。

请记住,表输入接收的列的顺序(选择值之外的列)与用于占位符(?)的顺序相同。对于您只使用一个占位符的问题,这应该不是问题,但在您逐渐使用 Pentaho 时请记住这一点。 第一个想法(csv > 选择值 > 表输入)

第二个想法,使用数据库查找

这是另一种方法,您无法个性化对数据库进行的查询,并且可能会体验到更好的性能,因为您可以设置“启用缓存”标志,并且如果您不需要在 where 子句上使用函数,这确实是推荐的。 第二个想法(csv > 数据库查找))

第三个想法,使用数据库连接

如果您的 where 子句需要一个函数,这是我推荐的方法。它看起来很像表格输入方法,但您可以跳过选择值步骤并选择要使用的列,重复同一列多次并启用“外部联接”标志,该标志返回没有查询结果的行 第三个想法(csv > 数据库连接)

专业提示:如果您觉得转换运行太慢,请尝试使用该步骤中的多个副本(此处的文档),并且显然要确保该表具有适当的索引。

于 2016-08-08T14:10:18.763 回答
-2

是的,有一种不使用参数直接分配的方法。执行以下操作。

用于Block this step until steps finish停止table input step直到csv input步骤完成。

full_ktr

以下是您如何配置每个步骤。

注意

  1. Postgres 查询应该是select * from person where EXTRACT(YEAR FROM birthdate) > ?::integer

  2. 检查Execute for each rowReplace variables in在表格输入步骤中。

  3. 仅选择 中的生日列CSV input step

在此处输入图像描述

于 2016-08-06T13:21:30.297 回答