本文介绍: 拉链表是缓慢渐变维的一种解决方案.拉链表,记录每条信息生命周期,一旦一条记录生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期,如果当前信息至今都有效,就在结束日期中填入一个最大值(9999-12-31)

目录

什么是拉链表

为什么要做拉链表?

没使用拉链表:

使用了拉链表:

题中订单拉链表的形成过程

实现语句


什么是拉链表

链表是缓慢渐变维的一种解决方案.

链表,记录每条信息生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期,如果当前信息至今都有效,就在结束日期中填入一个最大值(9999-12-31)

为什么要做拉链表?

拉链表适合于:数据会发生变化,但是大部分是不变的
比如:订单信息从未支付、已支付、未发货、已完成状态经历了一周,大部分时间是不变化的,如果数据量有定规模,无法按照每天全量方式保存

使用拉链表:

从上图可以看到,如果按照上面那个表的记录方法,因为订单未发货的状态从1月持续到了12月,假如一直都是全量同步的方式,那么未发货这条信息,我们需要用350多行来记录维护他,但对客户来说,或者维护人员来说,我们关心的是订单状态转换的那一刻,在这期间的信息并不重要,所以这种记录方法这会导致冗余过多

使用了拉链表:

从上图的下面那张图可以看到,原本我们需要用350多行维护未发货这条状态的信息,使用了拉链表后,我们需要一行,即可涵盖了1月3日到12月11日这300多天的状态.

题中订单拉链表的形成过程

 制作拉链表,简单来说就是在表原本的字段上,再加上两列字段,一个开始时间,一个结束时间

然后每天找出新增和变化的订单导入到拉链表中,通过合并初始的表和新增变化的表,就能得到对应的拉链表

实现语句

1.从ods层得到每天更新或者新增的数据表

2.原始拉链表 left join量表,如果增量表关联idnull或者原始拉链表end_time不是9999-12-31(9999说明这是最新的状态) ,保留原有数据,否则修改拉链表的end_time为增量表中start_time 减去 1

3.拿着left join 修改后的拉链数据,直接union all 增量数据集

4.把最新拉链数据保存临时表中 

5.insert overwrite 把数据插入到原始拉链表中

原文地址:https://blog.csdn.net/m0_49956154/article/details/134718429

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41678.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

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