我正在使用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
)
我一直在尝试变量,但它们似乎只是环境,而不是上下文。此外,在脚本中替换变量的选项似乎对我没什么用。
希望你能帮助我。谢谢你的时间。答案 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步骤,因为只有一个表用于提取数据。它具有良好的性能,并提供缓存机制。