微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 ETL 期间用代理键替换主键?

如何解决如何在 ETL 期间用代理键替换主键?

一个问题困扰了我一段时间。

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

在我看来,一个具体的工作流程如下所示,但我还没有在实践中做到:

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

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

解决方法

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

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

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

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

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

    B.如果源记录和目标记录之间没有变化,您可以决定不处理源记录

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

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

    B.使用 ETL 工具的功能,例如一个序列生成器

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。