1.原样保留
对于某些维度属性,值不会发生变化,因此可以保留初始值,此方法什么也不做。例如日期维度的大多数属性,值都不会发生变化,如月份、季度、是否节假日等属性。
2.重写
该类型和业务系统保持一致,直接update,将维度属性修改为最新值,直接覆盖原有的值,不保留历史信息。该类型总是反映最近的情况,会破坏历史情况,因此适合业务只关心最新属性值、不关心历史信息的情况。
3.增加新行
在维度表中增加新的一行,新行中采用新的属性值。此方式及其变种是处理缓慢变化维的主要技术。
4.增加新列
该方法在维度表中增加新的一列以保存原来的属性值。
5.增加微型维度
当某维表是一个大型维度表,采用方式3时,如果某些维度属性变化相对较快,这将导致维度表中的数据量增长过快,带来过多的数据冗余存储,该维表变得越来越大,导致存储压力和性能压力,严重影响对历史数据的查询、分析效率。
6.快照维度
此种方式比较暴力,每天保留全量维度属性的快照数据,自然键及日期键作为事实表的外键。此方式依托的是当前存储成本远低于计算成本,以空间换时间的理念。
7.拉链表 是方式3的变形,对于有变化频率不太高的维度属性,相较于方式6,大大降低了存储;对于变化频率很高的维度属性,不适用此方法,可考虑垂直拆分。
总结:
不止上面7种,还有三种组合方式(微型维度与方式2支架、方式2属性增加到方式3维度、双重外键并且方式2与方式3的结合)不常用。
方式2适合不关心历史信息的业务场景;
方式3最为常用,但不适合处理变化十分迅速的维度属性;
方式4不太常用,适合维度变化次数很少(如不超过两次)的场景;
在大数据时代,方式6、7比较常见。
方式6简单粗暴、易于理解和使用,但是存储成本高,造成了很大的存储空间的浪费;
方式7相对存储空间小,但是使用成本高,对于BI及其他下游使用人员来讲,不易于理解,另外该方法可以很方便的找到某一时间有效的数据(生效日期<= 选择的时间<=失效日期),但是对于某一段时间生效的数据则不太好关联,需要做技术改造。