黑洞

这里藏着一些独特的想法

0%

拉链表的实现原理

什么是拉链表

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。
记录一个事物从开始,一直到当前状态的所有变化的信息。
Reference: https://cloud.tencent.com/developer/article/1752848

拉链表是一种维护缓慢渐变维的方式,可以让我们方便地查看某些维度在历史阶段的状态。

拉链表的实现

图床压缩得太狠了,如果看不清可点击放大,也可点我查看高清一图流。

假设业务部门有一张名为t_orders的订单表,我们需要以拉链表的形式存放进数仓。

全量抽取

由于数仓中没有原始档案,需要先全量抽取一次,同时在ODS层的表中新建两个拉链字段,它们分别是:start_timeend_time

  • start_time | valid_from:代表着抽取日期,也代表着老记录的失效(过期)日期(下文将说明)。
  • end_time | valid_to:代表着记录的失效(过期)日期。

全量抽取.jpg

增量抽取

有了t_orders_ods后,以后的每一天只需要抽取前一天的新增的记录与状态发生改变的记录即可。

增量抽取.jpg

更新与合并

通过观察上图,不难发现订单编号为2的到货状态(delivered)发生了改变,同时新增了订单编号为5的记录。由于原本在t_orders_ods中订单编号为2的记录失效了,我们需要更新它的过期时间。

更新过期时间.jpg

接着把新记录插入到后面(合并t_orders_odst_orders_ods_new)。

合并新记录.jpg

为了防止意外造成数据丢失,我们不能使用上图的语句直接覆写t_orders_ods!应当把结果存入一张临时表,再用insert overwrite覆写t_orders_ods

流程总结

拉链表流程图.jpg

如果觉得文章写得不错或对您有帮助,请我喝杯柠檬茶吧!