在 SSIS 中使用 CDC 来带来关联的记录

Posted

技术标签:

【中文标题】在 SSIS 中使用 CDC 来带来关联的记录【英文标题】:Using CDC in SSIS to bring over associated records 【发布时间】:2015-02-23 21:42:50 【问题描述】:

我在 SQL 2014 数据库上使用更改数据捕获 (CDC) 仅将新/更改/删除的记录引入数据仓库。

作为我的 ETL 的一部分,我正在展平两个表 - 订单和订单详细信息。所以在DW中就是OrderTrans,每个Trans就相当于一个Order Detail,每个Trans中都有重复的Order header信息。相当标准。

我在源数据库中的两个表上使用 CDC - 源 Orders 表和源 Order Details 表。所以我有两个临时表 - 合并到一个 Fact 表中。

我的问题是,如果订单详细信息发生更改 - 相应的订单记录不会被视为已更改。这是有道理的。但我正在 SSIS 中寻找一种方法来暂存所有已修改订单详细信息的所有订单记录。我知道我将不得不手动执行此操作作为 SSIS 中的一个步骤 - 但我不知道如何实现它......?我的暂存表和源表位于两台不同的服务器上 - 所以我无法编写一条 SQL 语句,将我的 CDC 暂存订单详细信息加入到源数据库中相应的(未更改的)订单中。

有什么建议吗?

【问题讨论】:

【参考方案1】:

我想出了一种方法来做我需要的事情。我想带来与任何更改的详细信息相关的订单。所以我在订单详细信息加载后添加了一个步骤,并将其作为数据源:

SELECT distinct o.*
from [orders] o
inner join  [cdc].[inventory_order_detail_CT] as od_cdc
on o.order_id = od_cdc.order_id
where o.order_id not in (select order_id from [cdc].[inventory_orders_CT])

_CT 表是 SQL 用来管理 CDC 的系统表

【讨论】:

以上是关于在 SSIS 中使用 CDC 来带来关联的记录的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库之SSIS开发

SSIS包瓶颈插入记录

Azure ADF 中具有动态源的增量复制 cdc 记录

SSIS 初次接触 + 开发记录

MSSQL中开启CDC导致事务日志空间被占满事件记录

如何记录SSIS执行SQL任务的输出