在 Kettle/Spoon/Pentaho 中循环
Posted
技术标签:
【中文标题】在 Kettle/Spoon/Pentaho 中循环【英文标题】:Loop in Kettle/Spoon/Pentaho 【发布时间】:2012-12-31 18:29:00 【问题描述】:我有一个这样的查询:
SELECT count(distinct ID) FROM TBLC WHERE date BETWEEN ? AND ?;
我正在使用 Pentaho Spoon。我正在使用“执行 SQL 脚本”/语句。我看到的选项是对每一行执行、作为单个语句执行和变量替换。
如果我需要更改查询或需要其他步骤来实施,请回复。
编辑:
我正在使用 Pentaho Spoon 将数据从 Infobright 数据库 (table1, table2) 传输到 Infobright 数据库 (table3)。
查询类似于:
SELECT table1.column1, table2.column2
FROM table1 JOIN table2 ON table1.id=table2.id
WHERE table2.date BETWEEN '2012-12-01' AND '2012-12-30'
我想要一种方法,这样我就不必在每次运行转换时手动指定日期范围。我想自动化日期范围。
提前致谢。
【问题讨论】:
你能更详细地描述你想要做什么吗?我真的不清楚你想做什么或问题是什么。 我已经编辑了我的问题。谢谢。 【参考方案1】:根据您所描述的,我相信您可以通过使用生成行步骤将行注入包含所需日期的流中来完成您想要的操作,然后为流中的每个日期行生成所需的查询以从源表中获取您想要的所有行。
【讨论】:
【参考方案2】:您可以将 execute 用作单个语句和变量替换,因为它们最适合您的用例。
将参数 StartDate 和 EndDate 添加到您的转换中,并在您的查询中使用它们,如下所示。在Execute SQL Script 步骤中启用“变量替换”。
SELECT table1.column1, table2.column2
FROM table1 JOIN table2 ON table1.id=table2.id
WHERE table2.date BETWEEN **$StartDate** AND **$EndDate**
在执行转换时提供 StartDate 和 EndDate 的值。
【讨论】:
【参考方案3】:我猜日期在数据库中的表或文件中 你可以做的是: 创建一个将这些参数传给 Steam 并设置变量的作业。 在下一份工作中,您可以使用 date_from date to
将它们用作查询的变量这样,每次运行作业时,它都会占用数据库中的内容 你当然需要更新 date_from 和 date_to
【讨论】:
以上是关于在 Kettle/Spoon/Pentaho 中循环的主要内容,如果未能解决你的问题,请参考以下文章
SQL Schema分析:AdventureWorks的ProductCategory中loop的目的是啥?
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记