Sql server 增量加载-确定更新的ETL过程

Sql server 增量加载-确定更新的ETL过程,sql-server,ssis-2012,Sql Server,Ssis 2012,我有一个超过3000万行的表,执行截断和重新加载需要很长时间。我可以使用SSIS不匹配输出进行增量加载,但是我很难获得记录已更新的增量加载。该表没有日期字段,因此无法检查上次修改数据的时间 只是想知道是否有人遇到过类似的情况,你是如何解决的。我不想加载整个表,因为它可能需要3个小时,只有这一个表单独 在匹配的输出上,执行另一个查找,检查传入行是否与具有匹配主键的行不同。如果不同,则进行更新;如果相同,则不进行任何操作 我知道有两种方法可以检查行是否相同 1) 将派生列添加到新的传入行,该行将创建

我有一个超过3000万行的表,执行截断和重新加载需要很长时间。我可以使用SSIS不匹配输出进行增量加载,但是我很难获得记录已更新的增量加载。该表没有日期字段,因此无法检查上次修改数据的时间


只是想知道是否有人遇到过类似的情况,你是如何解决的。我不想加载整个表,因为它可能需要3个小时,只有这一个表单独

在匹配的输出上,执行另一个查找,检查传入行是否与具有匹配主键的行不同。如果不同,则进行更新;如果相同,则不进行任何操作

我知道有两种方法可以检查行是否相同

1) 将派生列添加到新的传入行,该行将创建每列的哈希值。然后在本地表中创建相同的哈希列。比较查找中的哈希

2) 在查找中,加入每个字段…即。A-->A、B-->B、C-->C等。然后重定向不匹配项以执行更新。如果有blob列,则可能无法执行此操作


1号可能效率更高,但设置起来更困难。

只是补充一点,公司不允许CDC、表上触发器等:(您好,谢谢Hank,这个过程可能需要一些时间,因为它将比较源中匹配的所有行和目标中的所有行,不是吗?这会花费很长时间吗?因为它将遍历所有存在的行,因此3000万行,这反过来将花费与截断和加载相同的时间?不是吗?或者我弄错了吗?问题是没有办法缩小要查看的窗口,例如昨天或前一天,因为没有日期显示。是的,您是对的……截断和重新填充会快得多……但是如果您的源数据(例如)只保留了30天的数据,那么您必须使用某种增量/upsert方法来保留历史数据a在您的表中显示了过去30天。好的,让我们开始创建…您的表中是否有任何字段是按数字或字母顺序创建的..比如主键?或者甚至可能是非唯一的拆分键、批处理键、分区键?是的,主键是一种可以排序的guid唯一标识符数据类型?这个lol im int将用于何处riguedI认为,也许你只能检查“最后x行”中的更改,其中x是一个小于3000万的合理数字。或者另一个想法是你只能检查最后一个“批次id”中的更改,这将获得相同的结果。