PDI表输入不会将值发送到下一步

时间:2013-12-05 15:38:29

标签: pentaho kettle

请引导我选择核心解决方案。

我有这样的转变(在Kettle - Pentaho PDI中):

CSV INPUT -> 2. Modified javascript value -> 3.Table input -> 4. Text file Output

1.CSV INPUT - 我有一个包含4列(A,B,C,D)的csv文件,我只传递给下一步前3列(A,B,C)

2.修改了javascript值 - 这里我做了一些转换int到这3列的字符串并转到下一步

3.Table输入 - 这里我有一个像这样的选择:

    SELECT column1, column2, column3, column4
      FROM tablename
      WHERE column2 = ? (this will be A)
      AND column3 = ?  (this will be B)
      AND column6 = ?  (this will be C)
      AND column8 = 'something'

4.Text文件输出 - 核心结果。

在之前的模型中都可以,但是当我尝试在查询表输入中添加params作为列名时,没有传递结果到下一步...并且日志中没有错误。在日志中我看到运行sql和计数值,但没有结果传递到下一步。

表输入中的查询:

    SELECT 
      column1, 
      column2, 
      column3, 
      column4,
      ? columnX  (this will be A)
      FROM tablename
      WHERE 
          column3 = ?  (this will be B)
      AND column6 = ?  (this will be C)
      AND column8 = 'something'

我很伤心,我看到了运行查询,没有错误,没有结果传递到下一步。

谢谢! 地理位置

1 个答案:

答案 0 :(得分:1)

我没有尝试过这种方式,但我不相信列名可以在Table Input步骤中进行参数化。在这种情况下,我倾向于在转换中动态构建SQL,然后使用Dynamic SQL row步骤执行它。此步骤采用先前由转换构建的SQL,运行它,并将结果连接到输入行。

请注意,这是一个常规数据库样式的内部联接(除非您选中“外部联接”复选框)。如果一行进入并导致查询产生3行,则从步骤输出3行。

另外,请注意Docs对模板SQL的评价。它是将步骤的元数据提供给转换的其余部分的原因。另请注意,任何选择为ColumnX的列必须与所有其他列相同,并且必须与模板SQL中的相应列相同。例如,您不能在一个语句中选择一个int,而在另一个语句中选择一个日期。

最后一点:您不需要JavaScript步骤只是将int转换为字符串。只需将输入步骤中的列类型更改为字符串即可。现在的样子,你转换成一个int,只是立即转换回一个字符串。