顾名思义,缓慢变化维(Slowly Changing Dimension)就是变化相对缓慢(相对与快速变化的事实表来说)的维度。
在维度建模理论中,有8种处理方式,包括基础的5种以及混合的3种。
再加上大数据时代的2种极限型,共10种,具体如下:
1 基础型
1.1 方式0:保留原始值
维度属性值不做更改,保留原始值。
此方式什么也不做,所以称之为方式0。
- 比如商品上架售卖时间:一个商品上架售卖后可能由于缺货下架,补充库存后又再次上架,此种情况产生了多个商品上架售卖时间。如果重点关注的是商品首次上架售卖时间,则采用方式0。
- 比如商品所属供应商:a商品的供应渠道是某供应商,随着时间推移可能转款到b供应商(由b供应商来供货),此种情况如果关注的是原始最初供应的供应商,则采用方式0。
1.2 方式1:直接覆盖
修改维度属性为最新值,直接覆盖,不保留历史信息。
- 比如商品属于哪个品类:当商品品类发生变化时,直接重写为新品类,如果业务只关心最新的品类。
1.3 方式2:增加新行
在维度表中增加新的一行,新行中采用新的属性值。此种方式需要借助代理键,需要为新行分配新的代理键,将其作为事实表的外键。
采用此方式,一般会在维度行中额外增加3列:行生效时间,行失效时间以及当前行标识(或者不使用当前行标识,由行失效时间来判断是否是当前行)
此方式及其变种是处理缓慢变化维的主要技术。
比如
维度属性值变化前:
商品键(代理键) | 商品唯一键(自然键) | 品类 | 行生效时间 | 行失效时间 | 当前行标识 |
---|---|---|---|---|---|
1 | SPU001 | 科技 | 2020-01-01 | 9999-12-31 | 1 |
维度属性值变化后:
商品键(代理键) | 商品唯一键(自然键) | 品类 | 行生效时间 | 行失效时间 | 当前行标识 |
---|---|---|---|---|---|
1 | SPU001 | 科技 | 2020-01-01 | 2020-01-31 | 0 |
3 | SPU001 | 教育 | 2020-02-01 | 9999-12-31 | 1 |
1.4 方式3:增加新属性列
在维度表中增加新的一列,原先属性列存