数据发生变化时,如果全部覆盖没有了历史变化,如果全部保存会有过多的数据冗余。
构建拉链表,通过时间标记发生编号的数据的每种状态的时间周期。
功能与应用场景
拉链表专门用于解决在数据仓库中数据发生变化如何实现数据存储的问题。
拉链表的设计是将更新的数据进行状态记录,没有发生更新的数据不进行状态存储,用于存储所有数据在不同时间上的所有状态,通过时间进行标记每个状态的生命周期,查询时,根据需求可以获取指定时间范围状态的数据,默认用9999-
12-31等最大值来表示最新状态。
实现过程
-
增量采集变化的数据,放入增量表中;
-
HIve中拉链表与临时表的数据进行合并,合并结果写入临时表;
-
将临时表的数据覆盖写入拉链表中;
SQL 实现
-
Step1 创建拉链表
-
Step2 模拟增量数据采集
-
Step3 临时表
-
合并历史拉链表与增量表
-
覆盖拉链表中
insert overwrite table dw_zipper
select *from tmp_zipper;