浅谈数据仓库存储方式-拉链表

拉链表简述
拉链表:维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。(百度百科)

拉链表应用场景


1)数据量比较大,变化频率变化比例不高。
2)需要查看某一时间点和时间段的历史快照信息。
3)拉链表适用于存储客户信息、账户信息等数据量大且不常改变的数据信息。
4)既能存储反映历史变化的数据,又能极大的节约数据存储空间。

拉链表加载

步骤1
采集当日全量数据加载到当日临时表中

PARTY_IDPARTY_NAMEADDRESS_DETAILSTATUS
0000001王一王府井大街未发生变化
0000002李二香榭丽舍大道未发生变化
0000003张三兰布拉大道当日修改内容
0000005陈五尼夫斯基大道当日新增记录

步骤2
取得昨日全量数据加载到昨日临时表中

PARTY_IDPARTY_NAMEADDRESS_DETAILSTATUS
0000001王一王府井大街未发生变化
0000002李二香榭丽舍大道未发生变化
0000003张三南京路当日修改前记录
0000004刘四威亚多勒罗沙大道当日删除前记录

步骤3
当日-昨日数据=当日新增、修改数据,将结果插入到日新增数据表中
相减结果

PARTY_IDPARTY_NAMEADDRESS_DETAILSTATUS
0000003张三兰布拉大道当日修改内容
0000005陈五尼夫斯基大道当日新增记录
新增和修改数据插入历史表中XXX_HIS,开始日期为当日,结束日期为9999-12-31,或者其他2999-12-31、3000-12-31等都行。

步骤4
昨日-当日数据=历史变化数据,将结果插入到待更新数据表中

PARTY_IDPARTY_NAMEADDRESS_DETAILSTATUS
0000003张三南京路当日修改前记录
0000004刘四威亚多勒罗沙大道当日删除前记录

将被修改和被删除的数据与历史表中数据做关联,更新END_DATE为当日日期。

最终结果,当日日期为2020-08-19

PARTY_IDPARTY_NAMEADDRESS_DETAILSTART_DTEND_DT
1王一王府井大街2011/1/19999/12/31
2李二香榭丽舍大道2011/1/19999/12/31
3张三南京路2011/1/12020/8/19
3张三兰布拉大道2020/8/199999/12/31
4刘四威亚多勒罗沙大道2011/1/12020/8/19
5陈五尼夫斯基大道2020/8/199999/12/31

查询某日数据

SELECT * FROM TABLE WHERE ${DT_DATE} >= START_DT AND ${DT_DATE} < END_DT


${DT_DATE} = 2020-08-19
PARTY_IDPARTY_NAMEADDRESS_DETAILSTART_DTEND_DT
1王一王府井大街2011/1/19999/12/31
2李二香榭丽舍大道2011/1/19999/12/31
3张三  兰布拉大道  2020/8/199999/12/31
5陈五  尼夫斯基大道  2020/8/199999/12/31

One Comment

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注