如何在Pentaho Data Inegration(Kettle)中返回没有匹配的行?

时间:2015-05-21 11:59:44

标签: java pentaho lookup etl kettle

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以使用Synchronize after merge步骤执行此操作以应用已识别的更改。在此步骤中,您可以指定flagfield以及与insert,update和delete对应的值。这些是在“高级”选项卡上指定的,必须填写它们才能使步骤正常工作。

对于像你的例子这样的非常小的表,我倾向于使用Table output步骤进行截断和满载,但是如果你的表很大并且变化的数量相对较小(< = ~25%) )并且复制不可用,这一步通常是要走的路。

enter image description here

答案 1 :(得分:0)

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

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

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

谢谢。