我最近遇到了一种使用Pragmatic Works'任务工厂组件。我使用Upsert任务来处理插入和更新,并选择" LastUpdate比较 - 更新基于最后更新'列值"发现记录变化的方法。
当软件包发布到QA时,我被告知它没有捕获更新。我的QA工程师正在运行程序包,更新目标中的记录,然后重新运行程序包,期望覆盖这些更新。相反,它们仍然存在。
过了一段时间,我得到了正在使用的脚本的副本:
UPDATE dbo.Table
SET OrderNum = 3 , DTModified = GETDATE() -3
WHERE PK1 = 800
多次查询尝试无法让程序包将此识别为更改。根据PragmaticWorks(here和here)的文档,DtModified字段的任何差异都应该触发更新。
上次更新比较会将源中的日期列与a进行比较 目标中的日期列。如果日期不匹配,则行为 更新。
答案 0 :(得分:0)
不幸的是,文档似乎不正确。我将QA脚本更改为
后UPDATE dbo.Table
SET OrderNum = 3 , DTModified = DTModified -3
WHERE PK1 = 800
ETL包能够识别记录已更改并使用源系统中的数据元素覆盖更改的值。
基于此测试,我认为Upsert组件的实际功能更多的是:
上次更新比较会将源中的日期列与a进行比较 目标中的日期列。如果源列日期早于目标列日期,则行为 更新。
由于我无法在网络上的任何其他位置找到此文档,因此在此处发布此结果可能会对任何类似搜索结果进行任何类似搜索,因为任务工厂Upsert组件的问题不会更新源中修改的记录。
虽然我的方案(QA工程师在目的地中更新)不会影响生产箱(希望如此),但我可以想到其他一些可能会影响某些事情的情况,例如源是否已滚动回到之前的快照。