将XML数据提供给多个SSIS数据流任务的最佳方法是什么?

时间:2015-04-27 22:36:44

标签: sql-server xml ssis

这是一个关于如何构建SSIS包来解决一个非常具体的问题的问题(我是新的SSIS,并且没有找到任何关于正确方法的内容)。

我的问题:我有一个SSIS包,它读取一个非常简单的XML文件。 XML Source将信息视为单个表。其中一个表列是影响记录处理方式的限定符。我不想在单个任务中对所有限定符进行处理,而是为每个限定符(模块化)分别设置一个任务。我可以让每个限定符的任务读取,分解和处理XML文件,但多次读取和分解XML文件似乎是一种低效的方法。我认为最好为XML Source保留一个持久存储数据的任务,然后让那些数据用于处理数据的其他任务。

可能的解决方案:根据我的阅读,正确的方法是将数据保存到原始文件目标中,然后让各种任务使用原始文件源。这对我来说似乎太像一个全局变量。有没有更好的办法?我可以弄清楚具体细节,所以我不需要详细的答案,只需要最好的方法。

由于

2 个答案:

答案 0 :(得分:0)

我会使用SSIS条件性拆分转换。它可以评估您的"资格赛"列并在该数据流任务中的不同路径下发送指定的实例。

https://msdn.microsoft.com/en-us/library/ms137886.aspx

答案 1 :(得分:0)

似乎没有一种方法可以将设计到SSIS中的DFT(数据流任务)分解。 SSIS的结构使得每个DFT都提供了完整的ETL功能。唯一的方法是"因素" DFT似乎是通过使用原始文件源和目标来伪造DFT输入和输出参数来在控制流中创建临时数据流。这意味着创建和管理大量文件(以及文件名的变量)。也可以使用记录集源和目标,但编码开销可能更高(我没有尝试使用Recordsets,只使用Raw文件)。

无法对DFT进行因子分析使得创建和验证复杂的SSIS包非常困难。微软真的需要提出一个解决方案。我在网络论坛中发现了另一个用例,能够恢复任务而无需一直回到开头。如果我能再次找到,我会在这里添加一个指向该帖子的链接。

一种解决方案可能是允许DFT执行另一个DFT,就像包可以在控制流中执行另一个包一样。这打破了每个DFT提供完整ETL功能的约定,但如果这是最佳方式,那么能够对DFT进行因子分解的好处将超过任何增加的概念复杂性。

免责声明:我是一名经验丰富的LabVIEW程序员,因此我对数据流的看法可能存在偏差。我可能错过了一个明显的解决方案。