SSIS – 使用查找实现 SCD 时锁定目标表



为了替代 SSIS 数据流中的内置 SCD 转换,我使用了列的校验和值和查找。以下是过程。

我需要在Target_Fact_table中实现 SCD 类型 1。

源查询

Select key, a, b, CHECKSUM (a,b) new_value from Source_table

在查找中

Select  key, CHECKSUM (a,b) Old_value from Target_Fact_table
如果未找到匹配

项,则将插入记录,如果找到匹配项,则比较New_value和Old_value,如果有任何更改,则更新记录。

首次运行没有任何问题。但是第二次,当源有更多记录要更新和插入时,由于批量插入和更新,目标表将被锁定。

我尝试从 OLE DB 目标任务中删除表锁,但锁定仍然存在。

我该怎么做才能避免这种锁定,或者我可以在更新转换中放置一些小的延迟吗?

最佳解决方案是 OLEDB 命令更新匹配的值,将匹配的数据插入目标中的临时表中,然后对事实数据表和临时表执行单个 UPDATE JOIN 语句以更新所有新值。

这样可以避免锁定,提高吞吐量,并且可以为更改提供更清晰的审核跟踪。

最新更新