如何使用SSIS Slowly Changing Dimension处理从源中删除的行

时间:2016-09-01 21:14:03

标签: sql-server ssis data-warehouse

我正在尝试为SQL 2014数据库中的Type 1缓慢变化的维度表实现ETL过程。负载需要跨服务器发生,我宁愿不使用链接服务器。

我一直在寻找在SSIS中执行此操作的方法,并发现缓慢变化的维度向导工作正常,除了这似乎只允许插入新行或更新行与业务键匹配,但是我当维度表中存在记录但已从源中删除时,我们找不到允许我处理的地方。我想确保删除这些内容。我错过了什么吗?有没有人在SSIS中找到更好的方法来处理这个问题?

我知道我可以将所有内容转储到目标服务器上的另一个表中并编写TSQL合并,但似乎应该是在SSIS中执行此操作的简单方法。

1 个答案:

答案 0 :(得分:1)

首先,我会避免SSIS中的SCD功能,因为它的性能往往很糟糕 - 实际上我被告知要通过MS认证的培训师以及很多有很多经验的人来避免它。它在很小的尺寸上是可以的,但很快就会变得难以管理。有人认为它在某些情况下可用,但是他们建议使用临时表进行更新。{/ p>

如果要在SSIS中执行此操作,可以使用查找来查找需要删除的行(使用无匹配输出查找目标中不在源中的行),然后使用OLE DB用于删除它们的命令。但是我会认真考虑简单地将数据移到临时区域并在TSQL中执行此操作,因为SSIS会通过痛苦的行来排除。与SCD工具类似 - 它可能适用于少量数据,但如果您处理的数量较大(或未来可能存在),则很可能无法管理。

如果您不想将所有数据移动到暂存区域,则可以使用SSIS构建仅包含需要删除的行的唯一ID的表,然后从中激活执行SQL任务控制流程一次删除它们。