【问题标题】:SSIS only extract Delta changesSSIS 仅提取增量更改
【发布时间】:2019-09-25 15:16:41
【问题描述】:

经过一些建议。我正在使用 SSIS\SQL Server 2014。我有一个夜间 SSIS 包,它将非 SQL Server 数据库中的数据提取到一个表中(SQL 表每次都预先被截断),然后我从这个表中提取以创建一个每日 csv 文件。

接下来,我只想每天将已更改的记录(即 Delta)提取到 csv。

最好的方法是什么?我正在考虑在 SSIS 中使用 CDC,但是由于我每次都在初始加载之前截断 SQL 表,这会是最好的方法吗?或者我是否需要在 SQL 中有一个初始加载的主表,然后导入另一个表并提取不同的地方?有关信息,SQL 中的表包含一个主键。

我只是想仔细检查一下,因为 CDC 假定表都在 SQL Server 中,而我的数据首先来自 SQL Server 外部。

感谢您的帮助。

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

    该表上的主键是您的可取之处。显然,您将不同数据拉入的 SQL Server 数据库不会知道从一个表刷新到下一个表哪些记录已更改,但是如果您添加两个额外的表,并使用额外的列修改现有表,它应该能够通过利用HASHBYTES 来解决这个问题。

    对于本例,我将新表命名为SentRows,但您可以在实践中使用更有意义的名称。我们将旧表中的新列称为HashValue

    HashValue 列作为varbinary 数据类型添加到您的表中。 NOT NULL 也是。

    创建您的 SentRows 表,其中包含主表主键中所有列的列,以及 HashValue 列。

    创建一个结构与主表相同的RowsToSend 表,包括HashValue

    通过将HASHBYTES 应用于表中的所有非键列,修改您的查询以创建HashValue。 (这将非常乏味。对此感到抱歉。)

    发送您的完整数据集。

    现在将所有键值和HashValues 移动到SentRows 表中。截断主表。

    在下一次拉取时,将SentRows 中的键值和HashValues 与主表中的新数据进行比较。

    主键匹配 + 哈希匹配 = 未更改的行

    主键匹配 + 哈希不匹配 = 更新行

    传入数据中的主键但从现有数据集中缺失 = 新行

    主键不在传入数据中,而是在现有数据集中 = 已删除行

    提取您需要发送到RowsToSend 表的所有更改。

    RowsToSend发送更改。

    将键值和HashValues 移动到您的SentRows 表中。更新已更改键值的散列,插入新行,并决定如何处理删除(如果必须处理删除)。

    截断SentRows 表为明天做准备。

    如果您愿意(如果您愿意,稍后会感谢您自己)将计算列添加到 SentRows 表,默认为 GETDATE(),它会告诉您添加行的时间。

    你走了。从现在开始,只有增量。

    编辑 2019-10-31:

    一步一步(或 TL;DR):

    1) 冲洗和填充MainTable

    2) 将 MainTable 上的键和散列与 SentRows 上的键和散列进行比较,以识别新的/更改的行。

    3) 将新的/更改的行移至RowsToSend

    4) 发送RowsToSend 中的行。

    5) 将所有行从RowsToSend 移动到SentRows

    6) 截断RowsToSend

    【讨论】:

    • 很高兴它有帮助!这是我非常熟悉的模式。 :)
    • 我不确定我是否 100% 遵循了这一点。我的 SentRows 表每天都会被截断和加载,因此计算的 GETDATE 列始终是今天的日期 - 我从来没有得到实际发送内容的完整历史记录
    • 我认为它的步骤是:将键值和 HashValues 移动到您的 SentRows 表中。更新已更改键值的散列,插入新行,并决定如何处理删除(如果必须处理删除)。我只是截断发送的行,然后从主表中复制
    • 我添加了一个概要。听起来您在流程中缺少一张表。
    • 谢谢,我去看看。再次感谢。
    猜你喜欢
    • 2016-12-12
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多