1、拉链表定义:
拉链表:记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表中会定义数据的有效时间,有效的起始时间与有效的截止时间
拉链表是数据仓库保留数据历史版本的一种方法
2、拉链表原理
参见网址:https://blog.csdn.net/SunWuKong_Hadoop/article/details/91810916
参见网址:https://blog.csdn.net/qq_36041534/article/details/80563364
3、拉链表使用场景
当你需要设计数据量非常大的表,同时,表中的某些字段会被更新操作。表的数据更新变化不是很大,为了保持历史的一些状态,需要查看历史快照信息(注意参见缓慢变化维 SCD)
4、拉链表适用情况
数据量很大,表中某些字段会被更新,但是变化的频率不是很高,业务需求又需要统计这种变化状态。每天全量一份数据,不仅浪费存储空间,有时可能业务统计也比较麻烦
5、拉链表实现步骤
6、查询性能
拉链表当然也会遇到查询性能的问题,比如说我们存放了5年的拉链数据,那么这张表势必会比较大,当查询的时候性能就比较低了,两个思路来解决:
1> 在一些查询引擎中,我们对start_date和end_date做索引,这样能提高不少性能
2> 保留部分历史数据,例如一张表存放全量的拉链表数据,然后再对外暴露一张只提供近3个月数据的拉链表
流水表存放的是一个用户的变更记录,比如在一张流水表中,一天的数据中,存放一个用户的每条修改记录,
但是在拉链表中只有一条记录。这是拉链表设计时需要注意的一个粒度问题。我们当然也可以设置的粒度更小一些,一般按天就足够
注意:拉链表和流水表的区别