如何 return Pentaho Data Integration (Kettle) 中没有匹配的行?

How to return no matched row in Pentaho Data Inegration (Kettle)?

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

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

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

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

谢谢。

确实有一个步骤可以做到这一点,但它不是单独完成的。这是 Merge rows(diff) 步骤,它有一些要求。在您的情况下,A 是 "compare" table,B 是 "reference" table。

首先,两个输入(在你的情况下来自 A 和 B 的行,在我的情况下来自 Dev 和 Prod 的行)需要按键值排序。在该步骤中,您指定要匹配的键字段,然后是要比较的值字段。该步骤向输出添加一个字段(默认称为 'flagfield')。比较每一行后,该字段被赋予四个值之一:"new"、"changed"、"deleted" 或 "identical"。请注意,在下面的示例中,我有明确的排序步骤。那是因为我的数据库的排序方案与 PDI 的不兼容,要使这一步起作用,您的数据必须按照 PDI 的排序顺序。你可能不需要这些。

您可以在此之后执行 Synchronize after merge 步骤以应用确定的更改。在此步骤中,您指定标志字段和对应于插入、更新和删除的值。仅供参考,这些在 "Advanced" 选项卡上指定,必须填写它们才能使步骤生效。

对于像您的示例这样非常小的 table,我希望只使用 Table output 步骤进行截断和完整加载,但是如果您的 table 很大并且数量更改相对较小 (<= ~25%) 并且复制不可用,这一步通常是要走的路。