【问题标题】:How to return no matched row in Pentaho Data Inegration (Kettle)?如何在 Pentaho Data Integration (Kettle) 中返回没有匹配的行?
【发布时间】:2015-05-21 11:59:44
【问题描述】:

我正在寻找在 Pentaho 数据集成中执行 SSIS 查找的解决方案。 我将尝试用一个例子来解释: 我有两张桌子A和B。 这里,表 A 中的数据: 1 2 3 4 5 这里,表 B 中的数据: 3 4 5 6 7 在我的过程之后: A 中的所有行而不是 B ==> 中的所有行都将插入到 B B 中的所有行而不是 A ==> 中的所有行都将被删除到 A 所以,这是我的最终表 B: 3 4 5 1 2 有人可以帮帮我吗?

【问题讨论】:

    标签: java pentaho lookup etl kettle


    【解决方案1】:

    确实有一个步骤可以做到这一点,但它并不是单独做到的。这是Merge rows(diff) 步骤,它有一些要求。在您的情况下,A 是“比较”表,B 是“参考”表。

    首先,两个输入(在你的例子中来自 A 和 B 的行,在我的例子中是 Dev 和 Prod)都需要按键值排序。在该步骤中,您指定要匹配的关键字段,然后指定要比较的值字段。该步骤将一个字段添加到输出(默认情况下称为“flagfield”)。在比较每一行之后,该字段被赋予以下四个值之一:“新”、“已更改”、“已删除”或“相同”。请注意,在下面的示例中,我有明确的排序步骤。那是因为我的数据库的排序方案与 PDI 不兼容,并且要使此步骤正常工作,您的数据必须按照 PDI 的排序顺序。你可能不需要这些。

    您可以通过 Synchronize after merge 步骤来应用已识别的更改。在此步骤中,您指定标志字段和对应于插入、更新和删除的值。仅供参考,这些是在“高级”选项卡上指定的,必须填写它们才能使步骤生效。

    对于像您的示例这样非常小的表,我更倾向于使用 Table output 步骤进行截断和完全加载,但是如果您的表很大并且更改的数量相对较小(

    【讨论】:

      【解决方案2】:

      在 Pentaho 中直接步骤不可用。有很多方法可以做到这些。

      => 编写 sql 来实现您的解决方案。如果写sql的执行速度也更快。

      => 使用过滤步骤也可以实现。

      谢谢。

      【讨论】:

      • 您是说没有步骤返回不匹配的行(以两个表作为源)类似于“SSIS 中的查找”或“Talend 中的 TMAP”之类的东西
      • 是的,这是正确的,但在 pentaho 中,这种类型的步骤不可用。您的要求可以做到,但有点困难,但没有直接的“查找”步骤。绝对可以满足您的要求。
      • 不是一个步骤,而是合并行(差异)和合并后同步的组合正是这样做的。请参阅@Brian.D.Myers 的回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多