Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS控制流与数据流_Ssis_Control Flow - Fatal编程技术网

SSIS控制流与数据流

SSIS控制流与数据流,ssis,control-flow,Ssis,Control Flow,我不完全理解SSIS包中控制流的用途。在我创建的所有包中,我只需添加一个数据流组件来控制流,然后其余的逻辑就位于数据流中 我见过一些更复杂的控制流示例(例如:在Excel文件中迭代行的foreach循环容器),但我正在寻找一个无法在数据流中实现的示例。我可以很容易地在数据流中创建到excel文件的连接 我试图更好地理解何时需要(或应该)在控制流中实现逻辑,而不是使用数据流来完成这一切 促使我开始研究控制流的原因是,我想重构SSIS数据流,并将包分解为更小的包,以便更容易支持并发开发 我正试着将我

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

我见过一些更复杂的控制流示例(例如:在Excel文件中迭代行的foreach循环容器),但我正在寻找一个无法在数据流中实现的示例。我可以很容易地在数据流中创建到excel文件的连接

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

促使我开始研究控制流的原因是,我想重构SSIS数据流,并将包分解为更小的包,以便更容易支持并发开发


我正试着将我的思想集中在如何使用控制流来实现这些目的。

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

此外,在数据流任务中,您不能执行诸如迭代、组件执行等任务

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


控制流任务本身对数据不做任何操作。它正在执行一些自身可能(或可能不)对某个地方的数据起作用的操作。数据流任务正在处理数据。它定义了它的运动和变换

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


希望这有帮助。

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

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


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

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

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

谢谢你的回复,詹姆斯。关于不对控制流中的数据执行任何操作的注释非常有意义。促使我开始研究控制流的原因是,我想重构SSIS数据流,并将包分解为更小的包,以便更容易支持并发开发。我正试图将我的想法集中在如何使用控制流来实现这些目的上。“控制流任务本身对数据不做任何事情”-没错,只是为了澄清一下,您可以在控制流中使用SQL命令执行“SQL任务”,该命令对数据做些什么。“您可以在控制流中有一个‘执行SQL任务’和一个SQL命令,该命令对数据做了一些事情”……这使得区别有点混淆。