【问题标题】:change data capture multiple tables for incremental load - ETL更改数据捕获多个表以进行增量加载 - ETL
【发布时间】:2015-05-20 17:07:11
【问题描述】:

我正在构建一个从 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. 我必须回源才能获取员工表的其他属性(这只是一个蹩脚的例子,实际上它可能是 10 个表和数十万次更改)。是否建议回源?

  2. 我可以将目标表加入此组合并填充缺失的属性。
    如果一个特定的临时表对维度记录没有变化,我是否必须这样做,因为我必须做很多案例语句、空处理等。我的问题是在 ETL 转换中加入目标表是否很常见?

【问题讨论】:

  • 感谢永远不应该是一个好问题的一部分。通过选择预格式化文本块,然后按 Ctrl+K 来缩进它们

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


【解决方案1】:

我在 Order Header 和 Details 方面遇到了同样的问题 - 如果细节发生变化,我需要能够内部连接到 Header 以更新我的扁平 Order Fact 表。

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

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

【讨论】:

    【解决方案2】:

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

    但是查询目标表是很常见的获取以前的信息。但确实需要做很多检查。

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

    【讨论】:

    • 您好,感谢您的回复。你说在暂存区维护一个SCD type 1,是不是要在暂存区维护一份源表的完整副本?
    • 是的。您可能需要一次完全加载。然后 cdc 数据将继续更新它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2023-04-09
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多