赞
踩
大数据中的拉链表说的是一种数据状态留存的需求,记录着一个实体对象从出生到死亡的全部过程以及时间段,普遍的实现方式都是依赖时间字段做状态的更新,下面给大家用一个例子做说明
上面的这个例子sql是对商品订单做拉链表的实现,其中涉及到的表有三张dwd_order_info为订单表、dwd_order_info_his为订单的拉链表、dwd_order_info_his_tmp是拉链表的临时表
实现的逻辑有两部分用union all合并结果,第一部分是拉取当天新订单,这部分数据有效期开始日期为当天日期,失效日期为一个自定义的永久日期
第二部分是拉取第一部分数据和拉链表现有所有数据做对比,拉链表为基表左连接查询,但是连接条件要注意,连接生效的内容除了id之外,另一个要求是只对拉链表中还在有效期内的数据进行连接查询,这样既能保留原有的失效数据,又能对比出生效数据中那些失效了
而失效数据的判定界限,只需要在查询语句中用 if 内建函数做一个判断,由于我们条件控制中关联效果,只生效在拉链表有效数据中,所以没被关联到的有两种情况,一是原本就是失效的历史数据,这部分数据我们在业务逻辑上是要存在的,因此用原来的失效时间保持不变就行,第二种情况是当天的新数据中并没有它的最新状态,也就是说它本身任然是有效数据,这样的数据本身也是要留下来的
而被关联到的自然就失效了,我们不能用原来的那个无期限时间,而是要用当前时间减去一天做它的失效时间,因为当天有了新数据,就说明这条数据在昨天就已经失效了
这两部分的数据合在一起就是拉链表的所有数据,把他输出到临时表,临时表在落地拉链表就可以了
在我的这个例子中临时表的存在是一个全量且没有分区的表,只是为了落地结果不会出现意外,而拉链表也是一个全量没有分区的表,因为对于结果来说没有再次在拉链表中留存历史的必要了,因为开始比较时用的就是全量,当然大家可以根据自己的实际需要做改变,再此我只是给大家说一下拉链表是什么,以及它的实现逻辑
如果觉得对大家有所帮助,大家可以收藏点赞哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。