我正在寻找一种有效的方法来检测生产中的已删除记录并更新数据仓库以反映那些删除,因为该表是> 12M行并包含用于记帐目的的事务数据。
最初,一切都是由我之前的某个存储过程完成的,我的任务是将流程转移到SSIS。
以下是我的测试模式到目前为止的样子:
数据流任务内部:
我正在使用MD5哈希来加速ETL过程,如this article中所示。
这可以通过不必在内存中存储这么多行来进行比较,并同时删除大量的条件分割处理,从而大大提高了流程速度。
但问题是它没有考虑在生产中删除的记录。
我应该怎么做呢?这对你来说可能很简单,但我是SSIS的新手,所以我不确定如何正确提问。
提前谢谢。
答案 0 :(得分:2)
我最终使用的解决方案是添加另一个数据流任务并使用查找转换来查找与我们的事实表相比在生产中不存在的记录。此任务在所有插入和更新之后,如上面的问题所示。
然后我们可以批量删除执行SQL任务中的缺失记录。
内部数据流任务:
内部查询转换:
(注意重定向行不匹配输出)
因此,如果ID不匹配,那么这些行将被重定向到我们设置为转发表的无匹配输出。然后,我们将staging连接到事实表,并在执行SQL任务中应用如下所示的删除。
答案 1 :(得分:0)
我认为您需要采用数据流来使用合并连接而不是查找。 这样你就可以看到新的/改变的&删除。 您需要使用相同的连接键(在本例中为哈希列)对两个Flow进行排序。
就我个人而言,我不确定我是否会打扰而是我只是简单地暂存所有prod数据然后执行3向SQL合并语句来处理插入更新&一次删除。如果您愿意,可以将哈希列保留为连接键。