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

时间:2015-03-18 02:31:48

标签: etl data-warehouse informatica informatica-powercenter cdc

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

示例:

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

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

1      2000

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

现在我们可以说peter的工资从2000年到3000年更新。由于我在每次加载后都删除了我的临时表,我将为当前负载提供以下内容。

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

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

1     3000

这是我的问题ss我必须填充尺寸的整行,即TYPE2。

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

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

2 个答案:

答案 0 :(得分:0)

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

但是,查询目标表对于获取以前的信息非常普遍。但你确实需要做很多检查。

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

答案 1 :(得分:0)

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

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

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