什么是拉链表
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。
记录一个事物从开始,一直到当前状态的所有变化的信息。
Reference: https://cloud.tencent.com/developer/article/1752848
拉链表是一种维护缓慢渐变维的方式,可以让我们方便地查看某些维度在历史阶段的状态。
拉链表的实现
图床压缩得太狠了,如果看不清可点击放大,也可点我查看高清一图流。
假设业务部门有一张名为t_orders
的订单表,我们需要以拉链表的形式存放进数仓。
全量抽取
由于数仓中没有原始档案,需要先全量抽取一次,同时在ODS层的表中新建两个拉链字段,它们分别是:start_time
和end_time
。
start_time | valid_from
:代表着抽取日期,也代表着老记录的失效(过期)日期(下文将说明)。end_time | valid_to
:代表着记录的失效(过期)日期。
增量抽取
有了t_orders_ods
后,以后的每一天只需要抽取前一天的新增的记录与状态发生改变的记录即可。
更新与合并
通过观察上图,不难发现订单编号为2的到货状态(delivered
)发生了改变,同时新增了订单编号为5的记录。由于原本在t_orders_ods
中订单编号为2的记录失效了,我们需要更新它的过期时间。
接着把新记录插入到后面(合并t_orders_ods
与t_orders_ods_new
)。
为了防止意外造成数据丢失,我们不能使用上图的语句直接覆写t_orders_ods
!应当把结果存入一张临时表,再用insert overwrite
覆写t_orders_ods
。