什么是缓慢变化维?缓慢变化维有多少种处理方法?缓慢变化维,即同一维表中属性随时间发生变化,那对于这种变化的维度,在数据仓库建设时有多少种处理方法咧~
一、基础型
0.原样保留
维度属性不会发生变化,保留原值。
这种适合属性标记为‘原型’的的情况,像用户的身份证号,商品的上架时间等
1.重写
属性值被新值覆盖。
这种情况只反映最近的工作,易实现,但破坏了历史情况,需小心使用
2.增加新行
在维度表中增加新行,新行中采用修改的属性值。
这种情况最少需要增加三个额外列,1.行生效时间 2.行失效时间 3.当前行标识
举个例子
店铺id(唯一键)店铺名称行业001小商铺科技
变化后
店铺键
(代理键)店铺id(自然键)店铺名称行业生效时间失效时间1001小商铺科技2020-01-012020-03-012001小商铺电商2020-03-029999-12-313.增加新属性列
在维度表中增加新属性,保留原来的属性。有时也被称为替换现实。
举例同上:
店铺id(唯一键)店铺名称行业新行业001小商铺科技电商4.增加微型维度
在维度表中某些属性变化很快,通常也被称为快速变化魔鬼维度。在包含几百万行以上的维度表中使用的属性也是微型维度设计的候选,即使并不经常变化。
举个例子:
RFM微型维度:
RFM键最近一次消费消费频率消费金额17天内[100,500)>=10000215天内[50,100)[5000,10000)330天内....
二、混合型
5.增加微型维度与类型1支架
类型1和类型4相结合,在微型维度表的基础上,在主维度表上增加重写微型维度的外键。
举个例子(延续类型4的RFM例子):
主维度表-用户表设计
用户id用户名称......RFM键001小胖......2
6.增加类型1属性到类型2
这种方式 结合了类型1类型2类型3,同时增加维度行和维度列,并以方式1处理新加的维度列。
主要场景:
该维度列变化频次较高,但即使这样也希望历史业务能以最新的值来分析。
无法确定每次该维度的变更时间。
希望保留历史数据方便追溯
举个例子:
id用户id用户名职位新职位开始时间结束时间10001小红袄法师法师2020-01-019999-12-31
变化后:
id用户id用户名旧职位新职位开始时间结束时间10001小红袄法师法师2020-01-012020-03-0120001小红袄法师刺客2020-03-029999-12-317.双类型1和类型2维度
事实表可以通过类型1维度展示最新属性值,通过类型2维度展示最新的历史概要。维度的持久键和主代理键同时存在事实表上。从类型1角度看,维度表的当前标识被约束到当前,通过持久键与事实表关联;从类型2角度看,当前标识无约束,事实表通过代理主键连接,两种方法可以按照不同的视图部署到BI应用上。
举个例子(延续类型2例子):
三、互联网常用方式
8.维度快照
按时间分区,每个分区保存一份维度快照,在大数据背景下,如果存储成本大于计算成本,可以以空间换时间。
9.维度拉链表
这个是类型2的变形,将代理键去掉,相比类型8减少了存储,但与事实表关联就没有那么方便了。