如何使用哈希字节删除SSIS中源表不匹配的记录

问题描述:

我需要在SSIS中从源到目的地加载表。表格包含大约150万行。如何使用哈希字节删除SSIS中源表不匹配的记录

到目前为止,我能够将新记录插入到目标表中,而不是在ID列上匹配,并且还更新那些与ID匹配的行,但不匹配HASHBYTES值。

这是我做了什么:

  1. 使用OLEDB源连接到使用查找转换来重定向基于ID列行的数据库
  2. 使用DerivedColumn得到“RefreshDate”列
  3. 如果ID不匹配,则插入行使用另一个Lookup转换,看是否与hashbutes目的地 表匹配tblEmployeesDestination
  4. 如果hashbytes不匹配,则使用OLEDB命令更新 目标表tblEmployeesDestination中的行。

我的问题是,什么是删除在didnt匹配源表的目标表中的行最好的方法是什么?

我应该使用哪种转换?

enter image description here

enter image description here

嗯,这取决于你的台面尺寸(1.5米 - 既不小,也不大),并已删除的记录数。

  • 已删除记录的数量相当小(恕我直言,小于10000) - 然后在DataFlow转换中使用OLEDB命令,如图所示。这里的问题 - 每行都会生成一个单独的SQL命令,这使得它非常慢并且运行时间很长。
  • 要删除的行数不小。比你可以在专用表中存储要删除的行的pkey,然后 - 使用SQL DELETE命令从主表中删除。
  • 检查方法。您可以在单个t-SQL MERGE命令中执行几乎所有的操作 - 插入不匹配pkey的行,删除匹配pkey且不匹配哈希字节的行。优点 - MERGE在单个交易中运行,但需要您熟悉它,并可能需要optimize table indexes
+0

#Ferdipux 我现在正在使用t-sql MERGE命令。事情是源和目标表位于不同的服务器上。大约需要15分钟(不确定是否考虑长时间)分钟用于UPSERT和DELETE。由于SSIS是为这些事情设计的,我认为使用它会提高性能 – Oleg

+0

@Oleg,我明白了你的观点。您可以卸载从SQL查询到SSIS服务器,但删除仍然是由于SQL。如果MERGE不行,我建议遵循第二个建议 - 将所有要删除的行保存在专用表中,然后 - 删除,检查删除命令执行计划。 – Ferdipux