使用Pentaho Kettle

时间:2017-06-06 11:27:48

标签: sql-server parameters pentaho kettle

我正在使用Pentaho Kettle重新创建数据混合过程,以便将各种数据源组合到一个数据集中。

我曾经使用行过滤器来检查某些失败是否为空(在这种情况下是长度和重量)。在过滤器的真实部分之后,我使用表输入(MSSQL)来运行查询并尝试在数据库中查找其他数据。有没有办法可以使用行过滤器中的字段(在我的情况下是外键patient_id)在Table输入中使用它来记下像

这样的查询
SELECT field1, field2, ... 
FROM my_table WHERE patient_id in ( 
    reference_to_the_patient_id_field_from_the_row_filter
)

我一直在尝试变量,但它们似乎只是环境,而不是上下文。此外,在脚本中替换变量的选项似乎对我没什么用。

希望你能帮助我。谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

表输入是行生成器步骤,而不是中间步骤。如果您将使用选项"从步骤"插入数据;它用值替换实际的问号,并将构建的查询发送到数据库。其中真正倾倒性能和容易出错(前一步的值是null还是空字符串,或者它甚至可能包含sql注入?)

DatabaseJoin步骤在这样的地方更适合。它使用PreparedStatement,这要快得多。

您可以更改sql查询以传递参数

select field1, field2 form my_table join (values(?)) as t(patient_id) on t.patient_id = my_table.patient_id

您可能会考虑使用DatabaseLookup步骤,因为只有一个表用于提取数据。它具有良好的性能,并提供缓存机制。