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