一、拉链表的使用场景
在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计:
1、 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。
2、 表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。
3、 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态。
4、表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。
二、拉链表的步骤分析
1、采集当日全量数据到ND(NewDay)表;
2、可从历史表中取出昨日全量数据存储到OD(OldDay)表;
3、(NDOD)就是当日新增和变化的数据,也就是当天的增量,用W_I表示;
4、(ODND)为状态到此结束需要封链的数据,用W_U表示;
5、将W_I表的内容全部插入到历史表中,这些是新增记录,start_date为当天,而end_date为max值;
6、对历史表进行W_U部份的更新操作,start_date保持不变,而end_date改为当天,也就是关链操作
三、拉链表的具体样例
1、创建从历史表查询昨天的表OD(OldDay)
CREATE TABLE temp.temp_test_array_user_his as
select * from
(select 'a' id,'100' amount,'20190801' start_date,'99991231'