繁体   English   中英

更改数据捕获多个表以进行增量加载 - ETL

[英]change data capture multiple tables for incremental load - ETL

我正在构建一个从informatica cdc获取数据的临时区域。 现在举个例子,假设我正在为增量加载复制两个表。 我必须在每次加载后从登台表中删除已处理的数据。 我将这两个表连接起来填充我的目标维度。 问题是更改只能在一个源上发生,而在特定负载中不会发生。

例:

Employee
---------
ID   NAME   
1    PETER  

EmployeeSal
------------
EMPID  SAL

1      2000

如果在我的第一次加载中复制了上面的内容,我加入两个表并加载它们就好了。

现在让我们说peter的工资从2000到3000更新。由于我在每次加载后都删除了我的临时表,因此我将对当前负载进行以下操作。

Employee
---------
ID   NAME   

EmployeeSal
-----------
EMPID  SAL

1     3000

这是我的问题,我必须填充维度的整行,即TYPE2。

  1. 我必须加入回源以获取employee表的其他属性(这只是一个蹩脚的例子,实际上它可能是10个表和数十万个更改)。 建议回到源头吗?

  2. 我可以将目标表加入到这个混合中并填充缺少的属性。
    这甚至是推荐的,因为如果特定的临时表没有维度记录的更改,我必须做很多case语句,nullhandlings等。 我的问题是,在ETL转换中加入目标表是否常见?

返回源系统,首先使创建暂存区域的目的无效。 通常不建议这样做。

但是,查询目标表对于获取先前的信息非常普遍。 但是你必须做很多检查。

另一个选择是在暂存区域中维护scd类型1。 在分段中保持插入和更新时间戳,您可以使用该时间戳在加载维度时仅获取已更改的记录。

我遇到了Order Header和Details的相同问题 - 如果细节发生变化,我需要能够内部连接到Header来更新我的扁平订单事实表。

我通过这种方式解决了这个问题:在我暂存了所有已更改的记录之后,我使用SQL任务查找任何缺少的Headers以获取更改的详细信息(反之亦然),该SQL任务使用订单ID数组加载对象。 我使用a for each循环来将缺少的Headers加载到staging中。

从Staging到数据仓库的内部联接现在将按预期工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM