小的差异如何产生重大影响
最近,我一直在思考维度建模,特别是我们如何在仓库/湖屋中表示不同类型的历史。有很多文章描述了如何在许多语言和平台上构建SCD2表格。但是,我想关注一些更微妙且不常讨论的内容:SCD2的语义以及各种设计选择对使用案例产生有意义的影响。
我想要讨论的两个主要问题是:
- 您选择给维度加版本号的日期确实很重要。选择绝不能是随意的,您的最常见的使用案例应该是您设计时首先考虑的。
- 如何给记录加版本号将确定对表格的访问模式。在某种程度上,这严格是符合人体工学的,但我认为人体工学是数据质量的一个重要方面;让用户轻松地做正确的事情应该是我们作为数据建模者的目标。
选择参考日期
创建SCD2表格的最常见模式是利用数据中的某个日期或时间戳。一旦您确定一行的含义发生了显著变化,无论是通过直接比较列还是哈希值的比较,您都需要确定“退休”现有记录并插入新记录的日期。
但我们应该使用哪些日期呢?对于许多类型的数据,我们可以选择以下三个选项之一:
- 提取时间戳
- 源系统时间戳
- 业务(实体/事件)时间戳
让我们深入了解。
提取时间戳
这种方法的视角是,“我们捕获数据时原始数据的样子。”真相的来源是您的仓库和加载它的过程,而不是数据本身的任何基本属性。
考虑以下示例:
从这条记录中,我们将生成以下SCD2记录(为了可读性,省略了一些元数据字段,如代理键、哈希值、维度插入时间戳等):