繁体   English   中英

如何将csv字段值分配给在Pentaho Spoon中的表输入步骤中编写的SQL查询

[英]How to assign csv field value to SQL query written inside table input step in Pentaho Spoon

我是Pentaho的新手,所以我的查询听起来很新手。

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

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

  2. 我已经通过以下方式在表输入步骤的PostgreSQL查询中使用了此参数:

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

    (要么)

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

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

使用“ 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 row选中Execute for each rowReplace variables in

  3. CSV input step仅选择生日列。

在此处输入图片说明

TLDR;

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

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

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

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

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

只是要记住,表输入接收到的列的顺序(选择值中的列)与用于占位符(?)的顺序相同。 这不是只使用一个占位符的问题,而是在使用Pentaho时要牢记这一点。 第一个想法(csv>选择值>表输入)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM