【问题标题】:DWH import with surrogate keys (and SCD)使用代理键(和 SCD)导入 DWH
【发布时间】:2014-02-17 11:03:22
【问题描述】:

我有一个使用内部代理键和类型 2 渐变维度的数据仓库。 在清算中,我们只有来自 erp 系统的业务密钥,如下所示:

在数据仓库中,我们希望使用代理键(注意:文章价格从 500 美元更改为 1000 美元,并且文章尽可能使用代理键,此处仅适用于制造商)。

如果我们只是使用业务密钥没问题,只需比较、更新旧条目、插入新条目。 但是使用代理键的最佳方法是什么?

从清除中的数据仓库中获取现有的 Ids(0 或 -1 表示尚不存在)然后比较条目?

将业务密钥也保留在数据仓库中,比较它们并更新 ID,然后在数据仓库中?

【问题讨论】:

  • 不清楚您的要求是什么。如果您想将数据从源清除加载到 dwh - 您必须生成代理键 - 为此,您还将源系统主键与代理键一起保存在 dwh 表中。并且在加载时,您会根据源/自然键在 dwh 表中查找数据,如果记录存在,则比较要跟踪更改的列,如果值发生更改,则更新现有行的 validuntil 并使用新的 validfrom 插入新行..
  • 所以您的意思是最佳做法是将业务密钥保留在数据仓库中,就像最后一个 screenshot 一样?
  • 是的,将源业务密钥保存在 dwh 中是有意义的

标签: etl data-warehouse surrogate-key scd


【解决方案1】:

为了能够在加载表格时进行查找 - 就像在加载文章时引用制造商时一样,您必须将自然/业务密钥存储在 DWH 中。根据我的经验,这总是会完成的。

但是您应该只将源实体的业务密钥存储在目标实体中。让我澄清一下,制造商的业务密钥应该只出现在 DWH 的制造商表中,而不是其他地方。当您需要在不同的表中引用制造商时,例如文章,您使用制造商的代理键。

所以,您在第二个屏幕截图中做对了。

然后,当您加载Article表时,您需要知道制造商是否针对特定文章进行了更改,您首先根据其业务密钥查找制造商的代理键,并将代理键与Article表中的键进行比较。这是通常的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多