拉链表 && 流水表
前言
- 拉链表:维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录而已,通过拉链表可以很方便的还原出拉链时点的客户记录。
- 流水表: 对于表的每一个修改都会记录,可以用于反映实际记录的变更。
适用场景对比
拉链表通常是对账户信息的历史变动进行处理保留的结果,流水表是每天的交易形成的历史;
流水表用于统计业务相关情况,拉链表用于统计账户及客户的情况
数据仓库之拉链表(原理、设计以及在Hive中的实现)
在有些情况下,为了保持历史的一些状态,需要用拉链表来做,这样做目的在可以保留所有状态的情况下可以节省空间。
拉链表
拉链表应用场景
数据量大,表中某些字段有变化,但是变化的频率不是很高
业务需求,需要统计这种变化状态。
每天全量一份,浪费了存储空间,获取不到数据的变化。
这时,拉链表的作用就体现出来了,既节省空间,又满足了需求。
一般在数仓中通过增加begin_date,en_date来表示。
电商支付案例
如下例,后两列是start_date和end_date.
1 | 2020/8/20 | 2020/8/20 | 创建 | 2020/8/20 | 2020/8/20 |
---|---|---|---|---|---|
1 | 2020/8/20 | 2020/8/21 | 支付 | 2020/8/21 | 2020/8/21 |
1 | 2020/8/20 | 2020/8/22 | 完成 | 2020/8/22 | 9999/12/31 |
2 | 2020/8/20 | 2020/8/20 | 创建 | 2020/8/20 | 2020/8/20 |
2 | 2020/8/20 | 2020/8/21 | 完成 | 2020/8/21 | 9999/12/31 |
3 | 2020/8/20 | 2020/8/20 | 创建 | 2020/8/20 | 2020/8/21 |
3 | 2020/8/20 | 2020/8/22 | 支付 | 2020/8/22 | 9999/12/31 |
4 | 2020/8/21 | 2020/8/21 | 创建 | 2020/8/21 | 2020/8/21 |
4 | 2020/8/21 | 2020/8/22< |