【问题标题】:SSIS Execute SQL Task - multiple sources in sequence and not in parallelSSIS 执行 SQL 任务 - 多个源顺序而不是并行
【发布时间】:2020-11-23 11:13:29
【问题描述】:

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

是否有任何方法可以配置包以一次执行一个(甚至一次执行两个)而不是一次执行 OLE DB 源?

【问题讨论】:

  • 确认一下,您的包是一个数据流,其中包含 14 个 OLE DB 源,它们命中一个 Union All 而不是 14 个执行 SQL 任务。
  • @billinkc,是的,没错

标签: ssis execute-sql-task


【解决方案1】:

理想情况下,您只需更改 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 项目。至少您可以将提取任务的创建自动化到暂存环境中。

【讨论】:

  • 我认为您在可以具有多个优先约束的控制流组件和数据流元素之间有些混淆,其中 OLE DB 源不接受任何输入。话虽如此,您添加暂存步骤的想法很有用,我将考虑将其合并。谢谢!
  • @Ethan1701 啊,是的,你是对的!我很抱歉。不过,我很高兴我的胡言乱语有一些好处:)
猜你喜欢
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 2023-03-27
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多