Hive数仓缓慢渐变维之拉链表
缓慢渐变维
主要是为了解决, 是否需要在数仓中维护历史变化的数据操作
注意:如果不维护一个数据的历史变化信息, 那么在进行数仓分析的时候, 是有可能对未来分析的结果产生影响
实现缓慢维的3种方式
**SCD1**
对于历史变化的数据, 是进行维护操作, 直接进行覆盖即可
此种操作仅适合于对于错误数据处理
**SCD2(拉链表)--常用**
对原有表, 增加两个新的字段, 一个是起始的时间字段,一个是截止时间字段
当有数据发生变更后, 只需要对上一次数据进行标记起止范围, 新增一个新的变更后的数据即可, 由此产生一个拉链数据状态
好处: 不会修改原有记录数据操作, 利于维护操作, 而且可以对多个历史版本进行数据存储操作
弊端: 造成数据冗余, 占用更大的磁盘空间
**SCD3**
直接对原有表, 进行新增列的方案, 一旦有数据发生变更, 新增一列字段, 标记当前最新数据即可,以此来维护历史变化数据
适合于磁盘空间不足, 而且只需要维护少量历史变化情况
优点: 尽可能减少数据冗余情况,
弊端: 不利于维护, 仅能维护少量的历史变化版本
拉链表
- 拉链表处理逻辑
1.创建临时表
2.查询新数据,即抽取数据中 end_time="9999-99-99"
3.查询旧数据,就原拉链表的数据,如果主键 id 与抽取数据中的重复,且 end_time="9999-99-99",需要改成 end_time=业务日期 - 1天
4.合并新旧数据到临时表
5.临时表插入原表
- 基本流程图
Hive数仓缓慢渐变维之拉链表
https://jface001.github.io/2021/03/05/Hive数仓缓慢渐变维之拉链表/