我并不完全理解SSIS包中控制流的目的。在我创建的所有软件包中,我只需添加一个数据流组件来控制流,然后其余逻辑就位于数据流中。
我已经看到了更复杂的控制流的示例(EX:foreach循环容器,它迭代Excel文件中的行。),但我正在寻找一个无法在数据流中实现的示例。我可以轻松地在数据流中创建与excel文件的连接。
我正在努力更好地理解何时需要(或应该)在控制流中实现逻辑与使用数据流完成所有操作。
是什么促使我开始研究控制流程,其目的是为了重构SSIS数据流以及将包拆分为更小的包,以便更容易支持并发开发。
我正试图围绕如何将控制流用于这些目的。
答案 0 :(得分:18)
数据流定义从源到目标的数据流。您不是从一个数据流任务开始并转到下一个。数据在您选择的实体(来源,转换,目的地)之间流动。
此外,在数据流任务中,您无法执行迭代,组件执行等任务。
控制流定义了要执行的任务的工作流,通常是特定的顺序(假设您包含的优先约束)。循环示例是控制流要求的一个很好的示例,但您也可以执行独立的SQL脚本,调用COM接口,执行.NET组件或发送电子邮件。控制流任务本身实际上可能与数据库或文件无关。
控制流任务本身对数据无效。它正在执行一些本身可能(或可能不)对某些地方的数据采取行动的行为。数据流任务正在对数据做一些事情。它定义了它的运动和转变。
应该明白何时执行控制流逻辑和数据流逻辑,因为这是唯一的方法。在您的示例中,您引用了foreach容器,并声明您可以连接到数据流中的电子表格。当然,对于一个电子表格,但是如何在文件夹中为多个电子表格执行此操作?在数据流逻辑中,你根本做不到!
希望这有帮助。
答案 1 :(得分:10)
数据流 - 仅用于将数据从一个源移动到另一个源。
控制流 - 提供何时运行数据流组件及其运行方式的逻辑。控制流还可以:执行循环,调用存储过程,移动文件,管理错误处理,检查条件并根据结果调用不同的任务(包括数据流),处理多维数据集,触发另一个进程等。
如果您将数据从一个位置移动到另一个位置并且每次都是相同的,而不是基于任何其他条件,那么您可以使用仅包含数据流任务的程序包,但在大多数情况下,程序包比那。
答案 2 :(得分:3)
我们将控制流用于许多事情。首先,我们有关数据导入的所有数据都存储在表格中。因此我们运行procs来启动数据流并结束它,以便我们的日志记录正常工作,我们循环遍历一组文件,我们将文件移动到存档位置并使用日期重命名并从处理位置删除它们。我们有一个单独的程序来执行文件移动并验证文件的正确comlumns和大小。我们运行proc以确保在进入数据流之前验证了文件。有时我们要求在处理文件时发送电子邮件或发送无法处理的记录报告。这些电子邮件被放入控制流程中。有时我们有一些清理步骤,使用存储过程更容易完成,从而将步骤放入控制流程中。
答案 3 :(得分:2)
尝试给出基本答案 - 控制流执行操作;例如执行SQL语句或发送电子邮件。控制流完成后,它会失败或成功。 另一方面,数据流在容器流项上找到,并提供移动,修改和操作数据的能力。