-1

有一个困扰我一段时间的问题。

在 ETL 过程中,如何用代理键替换主键?就像工作流程一样 - 它只是分配新的身份吗?如果是这样,以前的值如何,如何用新创建的业务键替换现有的业务键?

在我看来,一个特定的工作流程如下所示,但我还没有在实践中完成它:

  1. 删除 DimProduct 和 FactSales 表中的现有 PK_Product 和 FK_Product。
  2. 将新的 IDENTITY 列设置为 dimProduct。
  3. 将新列添加到 FactSales,其值来自基于先前业务键联接的新创建的 IDENTITY 列。
  4. 删除两个表中的旧 ProductKey 列。
  5. 为新创建的代理 IDENTITY 键添加约束。
  6. 为未来的值分配表之间的参考。

但请告诉我你在工作中是如何做到这一点的并纠正我,因为我认为我错了。

4

1 回答 1

0

让我们以最简单的情况为例,您的目标维度是从单个源系统加载的。基本步骤是:

  1. 获取源系统记录的唯一标识符 - 通常是 PK 或 BK

  2. 使用这个标识符在目标维度中查找对应的记录——它包含这个标识符以及 SK 和其他属性——如果在 Dim 中找到记录,则返回 SK

  3. 如果找到 SK,那么您将使用 SK 作为主要标识符对 Dim 执行更新

    一个。您可能还需要执行插入,例如如果 Dim 是 SCD2

    湾。如果源记录和目标记录之间没有更改,您可以决定不处理源记录

  4. 如果没有找到 SK,那么您将在目标 Dim 中插入一条新记录,以两种主要方式之一生成新的 SK 值:

    一个。使用底层数据库的能力,例如序列、自增列等。

    湾。使用 ETL 工具的功能,例如序列生成器

这些显然是您需要遵循的逻辑步骤。您如何实际实现它们完全取决于您的 ETL/ELT 组件 - 因此在您的数据库中运行合并命令看起来与 Informatica 工作流非常不同,但“在幕后”这两个过程都遵循相同的逻辑步骤

于 2021-03-08T20:58:52.030 回答