ssis中的排序需要很多时间,如果我在oledb命令条件下进行排序,则split不起作用



这是我的问题

我使用2源

first query (select * from servera.databasea.tablea)
secund query(select id, modifiedon from serverb.databaseb.tableb)
sort first query, sort second query
    merge join at left join
condition split is.. isnull(idtableb) then i do insert (insert ont serverb)
               !isnull(idtableb) && modifiedontableb<modifiedontablea then update(on server b)

它可以处理几行,但我处理的是50000多行,排序需要2个多小时,它会出现错误

我的另一种方法是做

右键单击show advanceditor和ole db源输出上的输入和输出属性我选择的已排序更改为真正的

在id的输出列上,我更改为排序键位置为1(我没有做任何修改)所以我为2 oledbsource做了这些步骤(服务器1和服务器2的oledb)

它的工作速度要快得多——它在5分钟内完成,并且(总是)插入条件分割现在不起作用:s因为总是要插入所以i在条件split上添加了parse(DT_DBDATE),并且它继续相等(仅插入)在我完成mofidiedon解析(DT_DATE)后永远不会更新,并且它仍然相等。那么我的问题是(我不想使用排序)我如何才能进行条件拆分工作?

排序步骤需要很长时间,因为您的排序操作内存不足。这意味着它将开始在磁盘上排序,而且速度非常慢。可以选择使用一些第三方排序组件,如NSort。

否则,您可以执行以下操作:

为了使MERGE工作,您的输入需要在查询中和使用SortKeyPosition进行排序。此外,它们也需要进行相同的排序。

您的查询应为:

SELECT * FROM servera.databasea.tablea ORDER BY id, modifiedon
SELECT id, modifiedon FROM serverb.databaseb.tableb ORDER BY id, modifiedon

现在将IsSorted设置为TRUE,将SortKeyPosition 1设置为id

在合并步骤中,使用id作为联接密钥。

现在,在条件拆分中,您可以使用两个输出案例。

请注意,如果每个id有多行,则需要更多的内容进行排序/连接,这样就不会出现顺序错误的情况。

最新更新