一、概念
- 缓慢变化维度(SCD):这是一个针对于维度表定义的名词,指的是一些随着时间会发生变化的一些属性。
二、变化跟踪策略
不同的变化跟踪策略适用于不同的维度分析场景,以下类型没有好,更好,最好的区分。需要数据管理员结合当前业务过程和维度属性特征做选择。在这里,每种策略会分配一个SCD类型号,类型号是针对于维度属性而言,不是针对一张表,所以一张表内不同属性可以使用不同的SCD类型来跟踪变化。
-
类型0:保持原始值
该类型表示维度表的属性绝对不会变化,如客户的原始积分,或者日期维度表的大部分属性 -
类型1:重写
表示此种类型的属性在发生变化时,维度表会将该列更新为当前值。该属性始终反映最近的情况,下图的部门名称属性就属于类型1
-
类型2:增加新行
该类型是真正能反映历史变化的一种类型,在发生更新时,会新插入一条记录。并且针对每一条记录会有一列有效时间和一列失效时间来表示该条记录有效的时间范围。
这种类型不需要对事实表做任何处理。在不同日期产生的事实,会对应到在该日期生效的维度行中,并以该维度行的属性进行上卷。
注意:类型2是精确跟踪缓慢变化维度属性的主要技术,因为新维度行能自动划分事实表的历史,因此这是一种非常好的技术 -
类型3:增加新属性
当维度表需要关注变化过程的时候,比如,每一个维度属性发生重建时。比如地区划分,部门划分,类目划分。当重建这些体系的时候。有针对这些属性变更前和变更后对事实数据按这些属性上卷的分析和对比,用之前的处理方式就显得有些吃力。
类型3的处理方式就是新增加一个字段,来记录历史属性,确保要么通过新的,要么通过旧的属性值来考察新的和历史事实表。
然而,针对不可预测的,频繁变化的属性值,这个方案是无能为力的。该类型适合于某个变化影响维度表中大量行的情况 -
类型4: 增加微型维度
以上几种类型关注了维度表的缓慢渐进变化,但是当变化率加快的时候,特别是针对几百万,上千万行的维度表,使用之前的类型处理就会让浏览和查询性能变得极其低下。
类型4的解决方案提供了一个新的维度来消除这些频繁变化的属性,这类维度叫做微型维度。例如,一个客户维度表含有年龄,消费水平,收入级别,购买频度这些频繁变化的属性,我们可以将这些属性抽象为一个人口统计维度。并将每一个属性划分成不同的范围,这个范围需要提前定义,因为之后要实现更细致的划分是很困难的。
上图是微型维度的简单表实现,相对于在维度表中跟踪历史所有的变化,这种方式将数据量缩减了成千上万倍。