SSIS顺序处理

时间:2013-07-28 00:03:29

标签: sql-server etl ssis

我在同一个数据流任务中有5个独立的数据流,每个数据流都有源和目的地。如何使它们顺序运行。它们似乎并行运行。我可以在不同的数据流任务中完成它。但是如何在单个数据流任务中完成呢?

2 个答案:

答案 0 :(得分:9)

在同一任务中没有独立的数据流。我知道导入/导出向导会这样做但只是因为Microsoft的团队做了某些事情,并不是最佳实践。数据流通过“免费”并行化获得其功能和性能。如果您不希望这样,请为了维护您未来代码的人,请创建4个额外的数据流并复制/粘贴到它们中。这样做完全没有害处。

为了实际回答上述问题,您必须引入某种依赖关系。在可怕的想法的万神殿中,以下是接近顶部。

我假设你的数据流中有多个独立的流看起来像OLE DB目的地的源(无关紧要)。修改源查询或在其后面添加一个派生列,并创建一个int(DT_I4)类型的列,并将其称为独特的HackedSortKey并为其指定值。

删除除其中一个以外的所有OLE DB目标。请改为使用OLE DB命令替换它。使用OLE DB Command的值是它允许行通过。顾名思义,OLE DB Destination只是数据的接收器。它唯一的输出列是错误1。为每个查询INSERT个查询。这是Command对象的设计难题,但是当他们在数据库上执行单例操作时,您也会遇到运行时的痛苦。 “哦,我要插入一行。我发出命令的那一刻。哦,我有一排要插入。请等一下。”每一行都会得到这种治疗。

获取您的第一个Source to Command对象。附上Fully Blocking component。使用排序。按HackedSortKey列排序,删除dupes并且不允许其他列通过。这一点就是强迫等待。只有一次所有数据通过上面的OLE DB命令后,Sort才会释放下游行(因为它不知道排序是什么,直到看到所有行)。通过选择不同的值,这会将原始行减少到A行。

流A中的Logjam,遇到流B.流B现在看起来像“源B” - > “排序B” - > “合并加入AB” - > “OLE DB命令B” - > “按HackedSourceKey排序”。需要“排序B”,因为合并连接需要排序输入。 匹配,因为我们的假匹配列中使用了相同的值。但是,您需要确保它是LEFT OUTER JOIN匹配而不是INNER。

为剩余的数据流进行泡沫,冲洗,重复此过程。但实际上,您希望使用不同的数据流并具有优先约束来管理执行。

答案 1 :(得分:0)

使用Completion约束而不是Success约束顺序对数据流进行字符串。通过这种方式,他们每个人都会独立于其他成功或失败,但会一次运行一个。

要设置约束的值,请双击从一个任务到另一个任务的行,并将值从“成功”更改为“完成”。