我是 Pentaho 的新手,所以我的查询可能听起来很新手。
我编写了一个转换,其中使用 CSV 文件输入步骤和表格输入步骤。 我遵循的步骤:
最初,我在转换属性中创建了一个参数。这 参数 birthdate 没有设置任何默认值。
我在表输入步骤的 postgresql 查询中使用了这个参数 以下列方式:
select * from person where EXTRACT(YEAR FROM birthdate) > ${birthdate};
我正在使用 CSV 文件输入步骤读取 CSV 文件。如何将我的 CSV 文件中存在的生日值分配给我在转换中创建的参数?
(或)
- 您能否指导我在不使用参数的情况下将 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 时请记住这一点。
第二个想法,使用数据库查找
这是另一种方法,您无法个性化对数据库进行的查询,并且可能会体验到更好的性能,因为您可以设置“启用缓存”标志,如果您不需要在 where 子句上使用函数这个真的很推荐。
第三个想法,使用数据库连接
如果您的 where 子句需要一个函数,这是我推荐的方法。它看起来很像表输入方法,但您可以跳过选择值步骤并选择要使用的列,重复同一列多次并启用“外部连接”标志,该标志返回没有查询结果的行
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/