2

M第一次使用pentaho勺子,我有一个输入表,我写了一个sql查询,希望输入表的结果数据存储在不同的目标表中,但在将数据存储到目标表之前检查数据是否准备好存在于表中。

4

2 回答 2

9

尽管 Cyrus 的答案对于您的用例来说是完全正确的,但您也可以使用该Merge Row (diff)步骤。

它将传入流与现有表进行比较,并判断记录是新的、修改的、相同的还是已删除的。然后,您可以使用一个Switch/Case步骤来采取适当的操作。

这种增量加载模式比第一种更高效,Insert/Update不仅因为它为您提供了更大的灵活性,而且主要是因为它不是一个高效的操作(您需要 4 次数据库访问:查看表,获取结果,如果需要更改它并推送结果)。

请注意,由于 PDI 并行运行所有操作,您可能会无意中打开同一个表进行读取和写入,从而导致死锁。通常的技巧是对 PDI 中的引用表进行排序,因此它必须读取所有记录以确保它具有最后一个记录。如果流在Input table.在此处输入图像描述

于 2018-07-11T09:59:46.327 回答
3

使用插入/更新步骤

此步骤完全符合您的要求(插入前检查),并且可以通过选中“不执行任何更新”来更新或跳过现有记录。

请务必配置确定唯一记录的关键字段。

于 2018-07-11T09:18:18.333 回答