使用ETL中的表连接更改数据捕获

在我的ETL过程中,我使用变更数据捕获(CDC)来仅发现自上次提取以来源表中已更改的行.然后我只对这行进行转换.问题是,当我有两个表,我想加入一个维度,只有其中一个已经改变.例如,我有表国家和城镇如下:

国家:

ID Name
1  France

城市:

ID Name  Country_ID
1  Lyon  1

现在假设在Towns表中添加了一个新行:

ID Name  Country_ID
1  Lyon  1
2  Paris 2

Countries表尚未更改,因此这些表的CDC仅向我显示Towns表中的行.问题是当我在国家和城镇之间进行连接时,国家/地区中没有行更改集,因此连接将导致空集.

你知道如何解决它吗?当然可能会有更多困难的案例,涉及3个或更多的表格,以及相应的连接.

最佳答案 这是执行实时更改 – 数据捕获时发现的典型问题,甚至是仅增量每日更改.

有多种方法可以解决这个问题.

一种方法是在维度或映射表中对自然键进行连接,以获取关联国家/地区(SELECT distinct country_name,[.other attributes ..] from dim_table,其中country_id = X).

另一种方法是将连接作为更改捕获过程的一部分进行 – 当一行加载到城镇时,触发器会关闭,将外键值加载到关联的临时表(国家/地区等)中.

点赞