[英]How to assign csv field value to SQL query written inside table input step in Pentaho Spoon
我是Pentaho的新手,所以我的查询听起来很新手。
我编写了一个使用CSV文件输入步骤和表输入步骤的转换。 我遵循的步骤:
最初,我在转换属性中创建了一个参数。 参数生日没有设置任何默认值。
我已经通过以下方式在表输入步骤的PostgreSQL查询中使用了此参数:
select * from person where EXTRACT(YEAR FROM birthdate) > ${birthdate};
我正在使用CSV文件输入步骤读取CSV文件。 如何将CSV文件中的生日日期值分配给在转换中创建的参数?
(要么)
是的,有一种不使用参数直接分配的方法。 进行如下操作。
使用“ Block this step until steps finish
才能停止table input step
直到“ csv input
步骤完成。
以下是配置每个步骤的方式。
注意事项 :
Postgres查询应select * from person where EXTRACT(YEAR FROM birthdate) > ?::integer
在表输入步骤中Execute for each row
选中Execute for each row
并Replace variables in
。
CSV input step
仅选择生日列。 TLDR;
我建议像下面第三个建议一样使用“数据库连接”步骤。
请参阅最后一张图片以供参考
好吧,您不需要任何参数,除非您要求运行转换时提供该参数的值。 如果您需要从CSV读取数据,则可以使用此方法进行。
只是要记住,表输入接收到的列的顺序(选择值中的列)与用于占位符(?)的顺序相同。 这不是只使用一个占位符的问题,而是在使用Pentaho时要牢记这一点。
这是另一种方法,其中您无法个性化对数据库的查询,并且可能会遇到更好的性能,因为可以设置“启用缓存”标志,并且如果不需要在where子句中使用函数,这实际上是推荐的。
如果您的where子句需要一个函数,那是我推荐的方法。 它看起来很像“表格输入法”,但是您可以跳过“选择值”步骤,选择要使用的列,重复同一列多次,然后启用“外部连接”标志,该标志返回没有查询结果的行
ProTip:如果您觉得转换运行太慢,请尝试使用步骤( 此处的文档 )中的多个副本,并显然确保该表具有适当的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.