数据仓库的重要特点之一是反映历史变化,所以如何处理维度的变化是维度设计的重要工作之一。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化,与数据增长较为快速的事实表相比,维度变化相对缓慢。阴齿这个就叫做缓慢变化维。
这里介绍的就是这些维度变化的处理,这边整理了一下目前主流的缓慢变化维的处理方式。
- 原样保留或者重写,这种方式理论上都是取最新的值作为维度的最终的取值,每个维度保留一条数据。这种处理方式是最简单的,直接将原系统的维度同步过来使用就可以,不用做过多的处理。
- 插人新的维度行,每当维度发生变化的时候,插入新增的一行。采用此种方式,保留历史数据,
维度值变化前的事实和过去的维度值关联,维度值变化后的事实和当前的维度值关联。也就是一个维度会存在多行的数据,按时时间范围将维度与事实表关联。 - 添加维度列,采用这种方式,主要是为了将变化前后记录的事实归为变化前的维度或者归为变化后的维度。也就是将产生变化的维度,可以在汇总的时候按照统一分组处理。
- 快照存储,这种方式就是每一个周期定时保存一份数据,与第二点有点想,不过这里会产生很多冗余的数据,当维度里大部分行在周期内,变动频繁的时候,可以采用。不过按照个人的开发经验,不恨很建议采用,具体要根据业务实际情况来选择。
- 极限存储历史拉链表,这种方式是方式2的优化版,就是当新的维度行与旧的维度行变化前后一致的时候,会合并一条。还有一点一般拉链表的时间粒度可能知道天,但是方式2,一般到秒,拉链表也是到秒。其他的与方式2一致。历史拉链表既能满足对历史数据的需求,又能很大程度的节省存储资源。什么是历史拉链表?历史拉链表是维护了历史状态,以及最新状态数据的一种表。 拉链表存储的数据实际上相当于快照,只不过做了优化,去除了一部分不变的记录而已,通过拉链表可以很方便的还原出拉链时点的客户记录。 拉链表既能满足反应数据的历史状态,又可以最大程度的节省存储,提高查询效率。
- 微型存储维度,微型存储指的就是,将维度中,快速变化的属性拆分出来,建立新的维度,这个是为了可以解决维度的过度增长导致历史拉链表效果大打折扣的问题,比如维度每几分钟变化一次。属性快速变化的维度,称为快速变化魔鬼维度。这个微型维度建议保留基维度,方便后续数据处理。
当然具体维度需要怎么处理,需要根据业务来,毕竟数据开发是一个很贴近业务的岗位。
需要数据仓库资料可以点击这个领取数据仓库(13)大数据数仓经典最值得阅读书籍推荐
参考资料:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。