17

我不完全理解 SSIS 包中控制流的目的。在我创建的所有包中,我只是添加了一个数据流组件来控制流,然后其余逻辑位于数据流中。

我已经看到了更复杂的控制流的示例(例如:foreach 循环容器,它遍历 Excel 文件中的行。),但我正在寻找一个无法在数据流中实现的示例。我可以轻松地在数据流中创建到 excel 文件的连接。

我试图更好地了解何时需要(或应该)在控制流中实现逻辑与使用数据流来完成这一切。

是什么促使我开始研究控制流,其目的是我想重构 SSIS 数据流以及将包分解成更小的包,以便更容易支持并发开发。

我正在努力思考如何将控制流用于这些目的。

4

4 回答 4

23

数据流定义了从源到目的地的数据流。您不会从一项数据流任务开始,然后转到下一项。数据在您选择的实体(源、转换、目标)之间流动。

此外,在数据流任务中,您无法执行迭代、组件执行等任务。

控制流定义了要执行的任务的工作流,通常是特定的顺序(假设您包含优先约束)。循环示例是控制流需求的一个很好的示例,但您也可以执行独立的 SQL 脚本、调用 COM 接口、执行 .NET 组件或发送电子邮件。控制流任务本身实际上可能与数据库或文件没有任何关系。

控制流任务本身对数据什么也不做。它正在执行一些本身可能(或可能不会)对某处数据采取行动的东西。数据流任务正在处理数据。它定义了它的运动和转变。

何时执行控制流逻辑和数据流逻辑应该是显而易见的,因为这将是唯一的方法。在您的示例中,您引用了 foreach 容器,并声明您可以连接到数据流中的电子表格。当然,对于一个电子表格,但您将如何为文件夹中的多个电子表格执行此操作?在数据流逻辑中,你根本做不到!

希望这可以帮助。

于 2010-12-15T17:22:41.853 回答
14

数据流 - 仅用于将数据从一个源移动到另一个源。

控制流 - 提供数据流组件何时运行以及它们如何运行的逻辑。控制流还可以:执行循环、调用存储过程、移动文件、管理错误处理、检查条件并根据结果调用不同的任务(包括数据流)、处理多维数据集、触发另一个进程等。

如果您将数据从一个位置移动到另一个位置并且每次都是相同的,而不是基于任何其他条件,那么您可以使用仅包含数据流任务的包,但在大多数情况下,包比这更复杂。

于 2010-12-15T17:42:33.763 回答
3

我们将控制流用于许多事情。首先,我们所有有关数据导入的数据都存储在表中。因此,我们运行 procs 来启动和结束数据流,以便我们的日志记录正常工作,我们循环访问一组文件,我们将文件移动到存档位置并使用日期重命名并从处理位置删除它们。我们有一个单独的程序来执行文件移动并验证文件的列和大小是否正确。我们运行 proc 以确保文件在进入数据流之前已经过验证。有时我们需要在处理文件时发送电子邮件或发送无法处理的记录报告。这些电子邮件被放入控制流中。有时我们有一些使用存储过程更容易完成的清理步骤,因此将这些步骤放入控制流中。

于 2010-12-15T18:21:34.373 回答
3

试图给出一个基本的答案——控制流执行操作;例如执行 SQL 语句或发送电子邮件。当控制流完成时,它要么失败,要么成功。另一方面,数据流存在于容器流项上,并提供移动、修改和操作数据的能力。

于 2014-02-08T23:17:17.147 回答