1

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

我有下一个场景/实验:

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

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

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

有没有我可以看到的例子?

4

1 回答 1

2

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

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

您当然可以通过决定使用自己的代理键来使其更复杂。

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

• 定期获得全套维度数据

• 您获得“仅更改”(又名 delta 接口)

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

首先,在全维度快照中,自然键保持不变,这与 delta 接口相反(您可能会为一个实体获得更多更改)。

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

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

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

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

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

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

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

于 2021-07-28T10:44:49.820 回答