1、缓慢变化维
基础型
一、覆盖
属性值被新值覆盖。
这种情况只反映最新的情况,易实现,但破坏了历史情况,需小心使用
二、增加新行
在维度表中增加新行,这种情况最少需要增加俩个额外列,1.行生效时间 2.行失效时间
举例:
id | 名称 | 数据生效开始时间 | 数据生效结束时间 |
1212 | 大大大大肉包 | 20220802 | 20220809 |
1212 | 回血大肉包 | 20220809 | 99999999 |
如果为了方便使用 可以加一列 当前行标识
三、增加新列
在维度表中增加新列,新列中增加历史名称。
id | 现用名称 | 历史名称 |
1212 | 辉血大肉包 | 大大大大肉包 |
但是这样的形式不方便进行拓展,如果第三次修改的话又要修改表结构,或者丢掉部分数据。
数仓方式
维度快照
按时间分区,每个分区保存一份维度快照,在大数据背景下,如果存储成本大于计算成本,可以以空间换时间。
2、退化维
维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为“退化维度”
例如: 订单表中有skuid,在日常分析可能会用到 sku的属性如:商品一级品类、商品二级品类等等,我们需要关联sku的维表
这时候方便分析,我们可以直接将商品的属性存到订单表中。
订单id,这种量级很大的维度,没必要用一张维度表来进行存储,而我们进行数据查询或者数据过滤的时候又非常需要,所以这种就冗余在事实表里面,这种就叫退化维度,citycode这种我们也会冗余在事实表里面,但是它有对应的维度表,所以它不是退化维度。