目录
3.4 数据更新 ,将数据日期为2023-3-4的日期添加到拉链表中
一、拉链表概念
拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据(SCD2)的一种常见方式。
百度百科的解释:拉链表是维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。
二、拉链表对应的业务需求
- 数据量比较大;
- 表中的部分字段会被update, 如用户的地址,产品的描述信息,订单的状态等等;
- 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态,比如,查看某一个用户在过去某一段时间内,更新过几次等等;
- 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右;
- 如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费。
- 拉链历史表,既能满足反应数据的历史状态,又可以最大程度的节省存储;
缺点:
- 开发/使用 成本略高,大量记录频繁变更会导致存储压缩效果降低
- 不分区的话,数据量大的时候,查询效率低
- 如果某个日期同步的数据出现问题需要重跑数据,则需要重跑从出问题的日期到当前日期的每一天数据
三、代码实现
拉链表主要用在dwd层,用来及时记录每个事务状态的。加入ods层数据发生的新增或者更新,相应的dwd层的数据也会改变。拉链表数据生成的思路是:ods更新或者新增的数据 + union +dwd拉链表历史数据(要更改历史数据中状态发生改变的字段)。
方法有两种: 窗口函数和union all 。
3.1 数据初始化:
导入数据到一张初始表 (外部表)
-----------拉链---------------
create database lalian;
use lalian;
drop table if exists orders;

文章介绍了拉链表的概念,它用于记录数据的历史状态,以节省存储并满足查看特定时间点数据的需求。通过示例展示了如何在DWD层创建和更新拉链表,包括数据初始化、ODS层增量表的创建及DWD层拉链表的维护,同时提到了使用窗口函数和UNIONALL进行数据更新的方法。此外,文章还提及了利用Canal监听MySQL变化获取每日用户更新表的方法。
最低0.47元/天 解锁文章
1045

被折叠的 条评论
为什么被折叠?



