赞
踩
数仓建立过程中,在有些情况下,为了保持历史的一些状态,需要用拉链表来做,这样做目的在可以保留所有状态的情况下可以节省空间。
拉链表,是记录每条记录的生命周期,通常记录中需要一个状态变化来展示,如果一个状态结束,那么就重新开始一条记录
所以,拉链表原始记录需要:
1.记录需要有 状态变化
2.记录需要有创建时间和操作时间
拉链表需要新增两个字段:状态开始时间和状态结束时间
拉链表适用于,数据会发生变化,但是大部分是不变的(实际是以运算换取存储空间)
拉链表反应的是数据的变化
建立拉链表
使用第一天的数据初始化拉链表
建立临时拉链表
把变化的数据和拉链表做一个计算和union all
最后再插入覆盖到拉链表即可
总结原理:
原理:
1.先把变化表数据拿出来,
2.union all (原表数据 left join 变化表,left join 右表如果有数据,那么就更新这条数据的end_date,没有就保持原数据不变)
3.把变化数据 union all (原数据 left join 变化数据) 覆盖到原表
4.下一次就又拿这个表来 left join 和 union all 下一次变化的数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。