SSIS主程序包设计要求的反馈 - 运行一堆子包

时间:2017-07-11 15:55:48

标签: ssis sql-server-data-tools ssis-2012

总的来说,我正在寻找有关运行主程序包的两种不同设计选项的反馈。

我有一个代理程序调用的程序包运行一堆处理数据的程序包(我想我们现在最多只有50个)。

最初的设计是将软件包分组为较小的块,称为直接调用,调用实际的包。以下示例:

MasterOld

Master Sub

我看到(并经历过)这种方法的一些看法是: 1.每个包都必须打开(即使没有必要运行,即没有文件存在) 2.#1为完成这个过程增加了很多时间 3.确保并行运行

所以我开发了一种新方法,它只运行具有必要文件的软件包,如果没有则记录该尝试。它是如此清晰,你不需要为每个包运行所有文件连接,因为你正在迭代它们。

Master New

我不确定它是否并行运行(我实际上对此表示怀疑)。

我正在添加填充正在foreach中迭代的ADO对象的数据流,以演示正在处理的文件。

Data Flow

注意:通常在DEV环境中,要处理的文件不多,但是,在部署到TEST和PROD时,将会有大多数文件需要处理。

我可以就这两种不同的方法获得一些反馈吗?

任何提供有效反馈的人都会收到赞成票!

2 个答案:

答案 0 :(得分:1)

我将采用第二种方法,因为它更清洁,易于调试。

以下是改进第二种方法的建议:

  • 创建一个包含所有包名称,启用/禁用标志,FileAvailable Flag
  • 的控制表
  • 创建一个Poll包,它将遍历文件并相应地设置标志和包标志
  • 遍历此控制表并仅运行已启用并具有文件的那些。

答案 1 :(得分:1)

我会选择改进的第一种方法,例如Inside package,使用Script task来检查文件是否存在于目的地。

例如:

  1. 创建脚本任务和变量。
  2. img1

    1. 在内部脚本任务中,编写类似于下图的代码(逻辑是,如果找到文件,则将其标记为true,否则标志为false):
    2. img2

      1. 现在使用此标志约束DFT的执行,如下所示:
      2. img3

        只有con,你必须在50个包中进行更改,但这是一次性活动。您的并行执行将保持不变。