【问题标题】:How to make a dynamic select based on a result set from previous step on Pentaho Kettle?如何根据 Pentaho Kettle 上一步的结果集进行动态选择?
【发布时间】:2020-06-17 18:29:38
【问题描述】:

我想根据上一步的结果集执行一个 select 语句,如下所示:

从表中选择列所在的列(上一步);

基本上,此步骤(过滤行)将根据条件拆分一组 id。我想选择那些测试为假的人,但我不知道如何只选择那些人。我要选择的有问题的表非常大,选择所有记录并加入结果集非常昂贵,所以我希望只选择我需要的组,这是否可能?

https://i.stack.imgur.com/Xu1qt.png

【问题讨论】:

标签: etl pentaho kettle pentaho-spoon pentaho-data-integration


【解决方案1】:

好的,让我试着更具体一点。

基本上我的打印显示有 3 个步骤。

第一步是表格输入,我从表格中选择。

第二步是数据库查找,我在其他表上查找我想要的一些字段。

第三步是过滤行,我在这里做了一个 if else 语句。

在我的第三步(过滤行)之后,我有 2 个流:True 或 False。

每个流也会返回一组 id 和其他字段,但我想这在这里并不重要。

我想根据上一步(过滤行 3° 步骤)返回的那些 id 进行选择语句。

基本上我希望它类似于此查询的行为:

选择 * 从表 where id in ("上一步");

where table 将永远是同一个 table,所以我不认为这会是一个问题或什么的。

而“上一步”是指在 3° 步骤(过滤行)之后返回的所有 id。

我现在正在做的是:我在另一侧有另一个表输入,我与这个结果集进行了合并连接(从 3° 步骤开始)。但是我必须选择整个表,然后加入我的结果集,这是非常昂贵的,我想知道我是否可以获得相同的结果,但性能更高。

我不知道我说得够不够清楚,但我现在道歉,因为英语不是我的主要语言,但我希望你们现在能理解我,谢谢。

【讨论】:

    【解决方案2】:

    您可以使用三个步骤来实现。

    首先,使用Memory group by 步骤将id 分组为字段。聚合tyoe 应为Concatenate strings separated by ,

    其次,使用User defined java expression步骤生成一个包含我们需要的SQL的新字段。表达式可能像"SELECT id,created FROM test WHERE order_id IN ("+ ids +")"ids是上一步的分组结果。

    最后,我们可以使用Dynamic SQL row这个步骤来通过指定的SQL查找数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      相关资源
      最近更新 更多