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

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

我有下一个场景/实验:

  1. 我每天都会调用 rest API 来提取有关公司的信息。 在我对数据库的初始加载时,一切都是新的,所以一切都非常简单。
  2. 第二天我调用相同的 rest API,它可能返回相同的公司,但其中一些可能(或没有)发生了一些变化(即,他们改变了规模、利润、位置等)

我知道,如果其余 API 仅返回有更改的记录,SCD-2 可能非常简单,但在这种情况下,它也可能返回没有更改的记录。

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

有没有我能看到的例子?

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

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

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

当然,您可能会因为决定使用自己的代理键而变得更加复杂。

您提到流程有两种主要类型的界面

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

• 您获得“仅更改”(又名增量界面)

矛盾的是,前者处理起来比后者简单得多

首先,在完整的维度快照中,自然键保持不变,这与增量界面相反(您可能会为一个实体获得更多更改)。 >

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

下一个重要决定是您是否预计会发生删除。这在完整接口中又是微不足道的,您必须定义一些约定,这些信息将如何在 delta 接口中传递。 Connected 是先前删除的实体是否可以重用(即重新出现在数据中)的问题。

如果您支持删除/重用,您将不得不考虑如何在维度表中显示它们。

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

某些实现使用 change_timestamp,其他一些实现使用有效期间隔 valid_fromvalid_to

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

因此您看到,在寻找某些特定实现之前,您需要仔细确定上述选项。例如 fulldelta 接口导致完全不同的实现。

本文链接:https://www.f2er.com/23716.html

大家都在问