SSIS删除重复数据

时间:2013-01-10 06:11:27

标签: sql ssis duplicates

我制作SSIS套餐时遇到问题。任何人都可以提供帮助吗? 情况如下: 我有两张桌子:A& B,结构相同。但它们存储在不同的服务器上。

我已经制作了一个SSIS软件包,用于将数据从A传输到B(一次大约一百万行,需要一到两分钟)。

之后,我希望在转移到A后删除表B的数据。我写的SSIS包将遵循这一点。我使用merge joinConditional Split命令选择相同的数据。

之后我使用OLE DB命令删除表A的数据(只需使用"Delete RE_FormTo Where ID=?" SQLCommand删除)。它可以工作,但它太慢了!删除重复数据大约需要一个小时!有谁知道更有效的方法吗?

SSIS Package Link

2 个答案:

答案 0 :(得分:2)

由于SSIS包设计不佳,执行速度肯定会很慢。 请参阅文档Best Practices of SSIS Design

让我向您解释一下您的包裹中的错误。

1.您正在使用阻塞转换(排序组件)。这些转换不会重复使用输入缓冲区,但会为输出创建一个新的缓冲区,并且它们大多比同步组件(如查找,派生列等)尝试更慢重新使用输入缓冲区。 根据MSDN

Do not sort within Integration Services unless it is absolutely necessary. In 
order to perform a sort, Integration Services allocates the memory space of the
entire data set that needs to be transformed. If possible, presort the data before
it goes into the pipeline. If you must sort data, try your best to sort only small
data sets in the pipeline. Instead of using Integration Services for sorting, use 
an SQL statement with ORDER BY to sort large data sets in the database – mark 
the  output as sorted by changing the Integration Services pipeline metadata
on the data
source.

2.Merge Join是一个semi-blocking transformation,它会妨碍性能但远低于Blocking transformation

有两种方法可以解决问题

  1. 使用查找
  2. enter image description here

    1. 使用执行SQL任务并编写合并SQL

       DECLARE @T TABLE(ID INT);
       Merge @TableA as target
       using @TableB as source
       on target.ID=source.ID
       when matched then 
       Delete OUTPUT source.ID INTO @T;
      
       DELETE @TableA
       WHERE ID in (SELECT ID
                   FROM @T);
      

答案 1 :(得分:0)

加入两个表后,只需插入Sort元素,他就会删除重复项.... http://sqlblog.com/blogs/jamie_thomson/archive/2009/11/12/sort-transform-arbitration-ssis.aspx