我第一次使用pentaho勺子,我有一个输入表,并编写了一个sql查询,并希望将输入表的结果数据存储在不同的目标表中,但是在将数据存储到目标表中之前,请检查表中已经准备好所有数据。
答案 0 :(得分:7)
尽管赛勒斯答案对于您的用例而言是完全正确的,但您也可以使用Merge Row (diff)
步骤。
它将输入流与现有表进行比较,并判断记录是“新建”,“已修改”,“相同”还是“已删除”。然后,您可以使用Switch/Case
步骤采取适当的措施。
此增量加载模式比Insert/Update
更有效,这不仅是因为它为您提供了更大的灵活性,而且还因为它不是高效的操作(您需要进行4次数据库访问:表格,获取结果,如有必要,进行更改并推送结果)。
请注意,在PDI并行运行所有操作的情况下,您可能会无意中打开同一表进行读取和写入,最终导致死锁。通常的技巧是对PDI中的引用表进行排序,因此它必须读取所有记录以确保它具有最后一个记录。如果在Input table
。
答案 1 :(得分:3)
使用“插入/更新”步骤
此步骤完全符合您的要求(在插入之前检查),并且可以通过选中“不执行任何更新”来更新或跳过现有记录。
请务必配置确定唯一记录的一个或多个关键字段。