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

标签 postgresql csv pentaho kettle pentaho-data-integration

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

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

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

  2. 我在表输入步骤的 postgresql 查询中使用了这个参数 以下列方式:

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

    (或)

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

最佳答案

TLDR;

I recommend using a "database join" step like in my third suggestion below.

See the last image for reference

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

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

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

请记住,表输入接收的列顺序(选择值中的列)与用于占位符 (?) 的顺序相同。对于只使用一个占位符的问题,这应该不是问题,但在使用 Pentaho 时请记住这一点。 first idea (csv > select values > table input)

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

这是另一种方法,您无法个性化对数据库进行的查询,并且可能会体验到更好的性能,因为您可以设置“启用缓存”标志,如果您不需要在 where 子句上使用函数这个真的很推荐。 second idea (csv > database lookup))

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

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

ProTip: If you feel the transformation running too slow, try to use multiple copies from the step (documentation here) and obviously make sure the table have the appropriate indexes in place.

关于postgresql - 如何将 csv 字段值分配给在 Pentaho Spoon 中的表输入步骤中编写的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796649/

相关文章:

sql - 如何在 PostgreSQL 中按周对日期进行分组?

python - 使用 Python 进行内联 CSV 文件编辑

java - 如何将 Pentaho Kettle 存储库配置到包含 Kettle ETL 脚本的文件夹和/或 SVN 存储库?

postgresql - Heroku 上的语法错误,但本地服务器上没有(与 postgresql 相关?)

java - 将 Spring boot JPA(MySQL) 迁移到 JPA(PostgreSQL) 会引发错误

postgresql - 循环遍历plpgsql中的复合数组

mysql - 用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用

sql - 在 Oracle 中导入 CSV 数据(尝试 Apex/SQL Developer)

Pentaho Mondian : Mondrian Schema xml Vs Pentaho metadata domain xmi Vs CDA cda files

sql - Postgresql 单引号转义