数据建模中的 SCD-2:如何检测变化?

SCD-2 in data modelling: how do I detect changes?

我知道 SCD-2 的概念,我正在尝试通过一些练习来提高我的技能。

我有下一个scenario/experiment:

  1. 我每天打电话休息API 提取有关公司的信息。 在我最初加载到数据库时,一切都是新的,所以一切都很容易。
  2. 第二天我打电话给同一个休息 API,可能 returns 相同的公司,但其中一些可能有(或没有)一些变化(即,他们改变了大小,利润,位置,...)

我知道如果其余的 API returns 只是记录有变化,我知道 SCD-2 可能真的很简单,但在这种情况下,它可能 returns 以及没有变化的记录。

在这种情况下,人们如何检测公司的数据是否发生变化以应用SCD-2?他们是否比较所有字段?

有没有我能看到的例子?

没有标准的 SCD-2,甚至没有一个独特的概念。它是大量可能方法的总称。唯一的机会是练习并了解什么是适合您的用例的 suitable。

在任何情况下,您都必须确定要保留历史记录的维度的自然键属性集

您当然可以决定使用自己的 代理键

您提到进程有两种主要的接口类型

• 您会定期获得全套维度数据

• 您获得“仅更改”(也称为增量接口)

自相矛盾的是,前者比后者更容易处理。

首先,在完整的维度快照中,自然键成立,与delta界面相反(你可能会得到更多一个实体的更改)。

此外,您还必须处理延迟更改交付甚至错误的更改顺序交付的情况。

下一个重要决定是您是否希望删除。这在完整接口中又是微不足道的,您必须定义一些约定,这些信息将如何在增量接口中传递。 连接的问题是以前删除的实体是否可以重新使用(即重新出现在数据中)。

如果您支持 delete/reuse,您将不得不考虑如何在您的维度中显示它们 table。

在任何情况下,您都需要在维度中添加一些额外的列来涵盖历史信息。

有些实现使用 change_timestamp,有些使用有效期间隔 valid_fromvalid_to.

甚至其他实现声称需要额外的 序列号 – 这样您就可以避免使用相同的时间戳进行更多更改的陷阱。

所以你看到,在你寻找一些特定的实现之前,你需要仔细决定上面的选项。 例如 fulldelta接口导致完全不同的实现。