use*_*675 3 sql-server ssis etl
我在同一数据流任务中有5个独立的数据流,每个数据流都有源和目的地.如何使它们顺序运行.它们似乎并行运行.我可以在不同的数据流任务中完成它.但是我怎样才能在单个数据流任务中完成它
在同一任务中没有独立的数据流.我知道导入/导出向导会这样做但只是因为Microsoft的团队做了某些事情,并不是最佳实践.数据流通过"免费"并行化获得其功能和性能.如果您不希望这样,请为了维护您未来代码的人,请创建4个额外的数据流并复制/粘贴到它们中.这样做绝对没有害处.
为了实际回答上述问题,您必须引入某种依赖关系.在可怕的想法的万神殿中,以下是接近顶部.
我假设你的数据流中有多个独立的流看起来像OLE DB目的地的源(无关紧要).修改源查询或在其后添加派生列并创建int(DT_I4)类型的列并将其称为唯一HackedSortKey的值并为其指定值1.
删除除其中一个之外的所有OLE DB目标.请改为使用OLE DB命令替换它.使用OLE DB Command的值是它允许行通过.顾名思义,OLE DB Destination只是数据的接收器.它唯一的输出列是错误1.INSERT为每个人写下你的查询.这是Command对象的设计难题,但是当他们在数据库上执行单例操作时,您也会遇到运行时的痛苦."哦,我要插入一行.我发出命令的那一刻.哦,我有一排要插入.请等一下." 每一行都会得到这种治疗.
拿你的第一个Source to Command对象.将完全阻止组件附加到其上.使用排序.按HackedSortKey列排序,删除dupes并且不允许其他列通过.这一点就是强迫等待.只有当所有数据都通过上面的OLE DB命令后,Sort才会释放下游行(因为它不会知道排序是什么,直到看到所有行).通过选择不同的值,这会将原始行减少到A行.
流A中的Logjam,遇到流B.流B现在看起来像"源B" - >"排序B" - >"合并加入AB" - >"OLE DB命令B" - >"排序HackedSourceKey".需要"排序B",因为合并连接需要排序输入.这里将是为相同的值是在我们的假匹配列用于匹配.但是,您需要确保它是LEFT OUTER JOIN匹配而不是INNER.
为剩余的数据流进行泡沫,冲洗,重复此过程.但实际上,您希望使用不同的数据流并具有优先约束来管理执行.