blog-数据仓库维度建模系列--缓慢变化维(SCD)的思考(一)

本文介绍了数据仓库中处理缓慢变化维(SCD)的四种常见方法:类型0-原样保留属性、类型1-更新属性、类型2-增加新维度行和类型3-保留原始并增加新属性列。每种方法都有其适用场景,如类型0适用于不需要展现变化值的场景,类型1关注最新属性,类型2能反映历史变化,而类型3则在新旧属性间提供切换。通过实例展示了如何在跨境零售公司的数据报表中应用这些方法来跟踪大侠帮成员属性的变更。
摘要由CSDN通过智能技术生成

缓慢变化维(Slowly Changing Dimensions)

缓慢变化维是维度技术中用于描述维度变化情况的一种分类。

什么是SDC?

在现实的实施中

先说一下缓慢变化维的概念。缓慢变化维(Slowly Changing Dimensions)指的是:维度中的某一个或某几个属性不是固定不变,会随着时间的推移发生低频次改变。

打个比方,小李在魔都奋斗多年,成功买房落户,那么小李的户籍地址就会发生变化;如果把自然人当作数据分析时的一个维度,那么户籍地址属性的就是一类SCD。


维度建模怎么处理SCD

维度建模的构建者和大神KimBall在他的著作中,对SCD的处理和构建方法经过系统性的总结,总共8种,这8种方法单一模式的模型构建方式,也有混合的模型构建方式。

简要的介绍下这8种方式:

  • 类型0-原样保留属性
  • 类型1-更新属性
  • 类型2-增加新维度行
  • 类型3-保留原始并增加新属性列
  • 类型4-增加微型维度
  • 类型5-微型维度+更新属性混合
  • 类型6-类型2+类型3混合
  • 类型7-双类型2+类型3混合

本期先分享类型0到类型3


SCD的实例

我们以一家跨境零售公司为例,基于公司普遍的数据报表需求,来学习下有哪些方案可以跟踪同一维度中属性的变更,以及使用建模构建中应该主要的事项。

我们以武侠小说中的大侠帮来模拟这个过程

假设有下面的大侠排行榜

大侠ID大侠名称所属门派
1001阳顶天明教
1002张无忌武当

后来,张无忌加入明教

大侠帮的数据变更为下面的情况:

大侠ID大侠名称所属门派
1001阳顶天明教
1002张无忌明教

类型0-原样保留属性

业务系统的属性变化,但是仓库中仍然保留原始的记录;进而事实表中仍然是在按照原始值分类。
按照类型1,数据仓库中的维度表情况如下:

  • 变化后
大侠ID大侠名称所属门派
1001阳顶天明教
1002张无忌武当

可以看到虽然业务系统变化了,但是数据仓库中仍然使用原来的值

适用范围

适用哪些不需要展现变化值的场景。但在实际应用过程中,这类是用的最少的。


类型1-更新属性

对维度中的属性根据业务系统数据的变化而重写。这种方式的优点是,属性值使用反应当前最新值情况。当然缺点也很明显,属性指的历史记录将会消失,历史属性无法得到反应。

按照类型1,维度表情况如下:

  • 变化后
大侠ID大侠名称所属门派
1001阳顶天明教
1002张无忌明教

适用范围

类型1是一类最常采用的SCD的模型设计方式,应用场景多样,对那些对历史值不敏感,只关注最新属性的系统而言,是最易理解和实现的建模方式


类型2-增加新维度行

这种方式指的是当维度发生变化时,保留以前的记录,同时新增一行,采用不同的主键,并标识为最新的维度;

按照类型2,维度表情况如下:

  • 变化后
维度键大侠ID大侠名称所属门派行有效时间行失效时间当天行标识
10011001阳顶天明教1970-01-012099-12-31new
10021002张无忌武当2021-01-102099-12-31old
10031002张无忌明教1970-01-012021-01-09new

这种方式,事实表只需要根据不同的生效及失效时间就能获取该时间段内的属性值,做到反映历史变化情况。但是这种方式,对SQL取数的查询效率、用户理解上有一点难度。


类型3-保留原始并增加新属性列

在维度表中增加一列新属性,原先的属性列中存放更新前的属性值,新增的属性列中存储最新变更的属性值。使用类型3可以在新旧2个版本的属性值中作切换。

  • 变化后
大侠ID大侠名称当前所属门派原先所属门派
1001阳顶天明教明教
1002张无忌明教武当

结束语

以上介绍了4中常见的缓慢变化维的处理方式。其它的后续在一一介绍。总之维度建模技术中,缓慢变化维的处理方式有不少,随着时代的发展,也有更多。各位在数仓建设中应该选择最适合自身需求的设计方式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值