2016-09-01 20 views
0

我试图在SQL 2014数据库中为我们的类型1缓慢更改维度表实施ETL过程。负载需要在服务器之间进行,我宁愿不使用链接服务器。如何处理使用SSIS从源中删除的行慢速更改维度

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

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

+0

不相关,只是想知道,链接服务器的使用有什么问题? – Anton

+1

您误解了SSIS ...您需要在合并过程中将数据移至表中。 SSIS本身没有OUTPUT,但它确实有一个错误处理方法,可用于暂存“已删除”行。当然,一个固定的TSQL MERGE也可以这样做,但假设不同的表需要SSIS ...然后在SSIS中识别出删除的行是不存在的行。但是,在SSIS中,坏行仍然是行。 –

+0

感谢您的信息。我正在考虑升级TSQl合并将是最好的选择。有几个原因,我不想使用链接服务器的一些周围的安全,我已经得到了一些过去(其他开发人员无法按照我设置的方式做一些事情,并最终在SA中进行身份验证等),还因为这个过程需要能够推送到多个服务器并轻松地转到新的服务器上,并且使用SSIS中的包配置更改连接字符串非常简单。当然可以通过链接服务器和一些动态SQL来完成。 – schiznig

回答

0

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

如果你想这样做在SSIS中,你可以使用查找发现需要删除(找到你的目的地其不在使用不匹配输出的源行)的行,那么OLE DB命令删除它们。但是我会认真考虑将数据移动到一个临时区域,并在TSQL中执行此操作,因为SSIS会通过折腾行来完成此操作。与SCD工具类似 - 对于少量数据可能还行,但如果您处理的金额较大(或将来可能),则很可能无法管理。

如果您不想将所有数据移动到临时区域,可以使用SSIS构建仅保存需要删除的行的唯一ID的表,然后触发执行SQL任务从控制流中删除它们。

+0

感谢您的信息。这些查找表中的大部分都很小,最大的可能是5000行,但它似乎是暂存区/ TSQL方法最好。我怀疑staging/TSQL合并将是我需要做的,但只是想检查SSIS是否有一个神奇的子弹,因为当我看到SCD转换时我有点兴奋。 – schiznig

+0

@schiznig - 不幸的是,SSIS有很多功能,比起它的价值来说真的更麻烦。您正确地使用它来避免链接的服务器和管理配置 - 这是一个闪耀的领域 - 但是很多任务和转换在某种程度上都不是最佳的。而且在某些情况下,它们比使用SQL更复杂。 –