Pentaho - Kettle:我可以在上一步的输出上执行SQL脚本吗?

时间:2014-11-17 17:10:14

标签: pentaho kettle

我有一个Pentaho-Kettle转换,它从两个单独的csv文件加载数据,然后应用'唯一行(hashset)'转换。

我可以根据“唯一行”步骤的输出执行SQL脚本吗?我想运行像

这样的东西
select field1, sum(field2) as MyCalc
from InputTable
group by field1
having sum(field2) > 100

其中InputTable不是SQL数据库中的表,但是唯一行的输出步骤。

这甚至可能吗?

我应该将'unique rows'的结果输出到数据库中的临时表吗?关键是我希望由没有数据库写入权限的人来运行;我可能会给他们写临时表的权限,但这就是它。

谢谢!

PS是的,我知道对于像上面那样平庸的事情,我可以使用'分组'步骤,但我想到的是比这更复杂的东西,据我所知,无法真正实现预定义的步骤。

2 个答案:

答案 0 :(得分:0)

继续@Rishu的回答以修改它: 这是完全 PDI所在的应用程序类型。

考虑以下一个作业的范围和两个子转换。

  • 主要工作
    • 转换I:获取替代列
      1. 执行任何生成列名称的逻辑
      2. 使用将行复制到结果步骤以单行输出列名称
      3. 此转换会将参数传递给其后的参数:
    • 转换II:查询数据库
      1. 从上一次转换中获取参数(从父作业的范围中更改转换的属性!)
      2. 完全按照下面的建议查询数据库,并通过检查表输入步骤中的替换脚本中的变量?复选框确保变量替换。
/* the following may look like a very invalid SQL query, 
   but that's how PDI would replace the variables with their values */
select 
  ${SQLSubstitutes.Field1}, 
  ${SQLSubstitutes.Field2} as MyCalc
from 
  InputTable
group by 
  ${SQLSubstitutes.Field1}
having 
  sum(${SQLSubstitutes.Field2}) > 100

我希望这有点帮助。

答案 1 :(得分:-1)

如果我没错,我认为你不能用csv文件中的值替换表名。我试过用SQL查询复制你的需求(db:PostgreSQL):

select field1, max(field2) from (select 1,2 as field1, 2,3 as field2) a 
group by a.field1

假设field1和field2的值来自csv文件。它没有取得理想的结果。

我认为您可以尝试的一种解决方案是将这些csv数据插入表中然后运行查询。

希望有所帮助:)