2020-06-02首页和商详页又产生了2条访问数据,该两条即为2020-06-02新增的数据,表更新后,dt分区2020-06-02新增2条数据(标红),此时数据表如下:
以此类推,2020-06-03又产生1条访问数据,表更新后,2020-06-03分区下新增1条数据(标黄),此时数据表如下:
因此,增量表每次更新是在原表数据的基础上记录本周期内新增的数据,如上例,按天更新的流量表,每次更新只新增一天内产生的新数据。注意:每次新产生的数据是以最新分区增加到表中,原先的数据依然存在于表中,如今天是2020-06-03,新增1条数据到表中,dt=2020-06-03,但2020-06-01的数据依然在表中,可以按照dt=2020-06-01进行查询;
2020-06-02有一名用户注册,即新增了一名用户(标红),表更新后2020-06-02分区内会记录全量的数据,包括2020-06-01的用户数据(标绿),此时数据表如下:
同理,2020-06-03又有2名用户注册,即新增了2名用户(标蓝),表更新后2020-06-03分区内会记录全量数据,即包含2020-06-02的用户数据(标黄),此时数据表如下:
因此,全量表每次更新都会记录全量数据,包括原全量数据和本次新增数据,即每个分区内的数据都是截至分区时间的全量总数据。注意:全量表中每个分区内都是截至分区时间的全量数据,原先分区的数据依然存在于表中,只是每次更新会在最新分区内再更新一遍全量数据。如上例,按照dt=2020-06-03查询出的数据是截至2020-06-03的所有注册用户数据,也可以按照dt=2020-06-02查询截至2020-06-02的所有注册用户数据。
2020-06-02账户id为111的用户支出100元,账户余额变为400,则原数据(标黄)的end_time即原数据的结束时间变为2020-06-02,dp变为EXPIRED即数据变为过期历史状态,dt为数据从ACTIVE变为EXPIRED的时间即2020-06-02;而新增的数据即账户id为111的用户余额变为400这条数据如下标红所示。数据表变化如下:
同理,2020-06-03账户id为222的用户支出50元,余额为50元,账户id为333的用户支出1000元,余额为500元,此时数据标变化如下:(标黄为变更前数据,标红为变更后数据)
因此,拉链表可以记录一条数据从开始到当前的所有历史信息,便于查询历史数据。如还原2020-06-02的历史快照,使用end_time> ‘2020-06-02’ and start_time<= ‘2020-06-02’ 查询,end_time过滤2020-06-02之前的旧数据,start_time过滤2020-06-02之后的新数据。
以上内容为个人学习所得,如有问题,欢迎交流指正~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181145.html原文链接:https://javaforall.cn