首页 > 解决方案 > SSIS 执行 SQL 任务 - 多个源顺序而不是并行

问题描述

我有一个带有执行 SQL 任务的大型 SSIS 包,它从 14 个不同的源读取数据,通过 Union All 运行它们,然后通过所有相同的转换。问题是,同时运行 14 个大型 SELECT 会阻塞服务器。我宁愿他们按顺序运行。但是由于它们都必须经过相同的转换集,我真的不想将它们分成单独的任务。

有没有办法将包配置为一次执行一个(甚至一次两个)而不是一次执行 OLE DB 源?

标签: ssisexecute-sql-task

解决方案


理想情况下,您只需更改 ETL 管道以将所需数据导入暂存环境,然后使用 SQL 而不是 SSIS 活动对该数据进行转换,因为这会更有效并为您提供更大的灵活性。

也就是说,一个可能可行的选项(这有点麻烦)是将您的 Execute SQL 任务与另Success一条路径进行菊花链式连接,因此每个任务都流向 Union All 和(除非链中的最后一个)下一个执行 SQL 任务,有点像这样:

Execute SQL Task 1 -------+
        |                 |
        v                 |
Execute SQL Task 2 -----+ |
        |               | |
        v               | |
Execute SQL Task 3 ---+ | |
        |             | | |
        v             | | |
Execute SQL Task 4 -+ | | |
                    | | | |
                    v v v v
                   Union All ---> Rest of package

如果您(可以理解)对 SSIS 开发的重复性感到有点沮丧,我建议您研究Biml以自动化实际的包创建。链接版本“BimlExpress”是一个免费的 Visual Studio 插件,一旦您熟悉它,它就可以节省大量时间。

如果您将转换定义为 SQL 语句,您可以提供提取元数据、转换存储过程和基于这些的目标模式,以一次性生成您的 SSIS 项目。至少您可以将提取任务的创建自动化到暂存环境中。


推荐阅读