数仓拉链表的使用和设计

全文由下面几个部分组成:

第一部分:先分享一下什么是拉链表,以及拉链表的应用场景;
第二部分:通过两个使用案例来对拉链表做近一步的阐释
第三部分:举一个具体的应用场景,来设计并实现一份拉链表,最后并通过一些例子说明如何使用我们设计的这张表 (因为现在Hive的大规模使用,我们会以Hive场景下的设计为例)。
最后:分析一下拉链表的优缺点,并进行补充说明,比如说拉链表和流水表的区别。

一、拉链表的定义和应用场景

1.定义

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链历史表,既能满足反应数据的历史状态,又可以最大程度的节省存储。

2.应用场景

设想如下的几种场景

(1)有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。
(2)表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态,比如,查看某一个用户在过去某一段时间内,更新过几次等等。
(3)表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。
(4)如果对这些表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费;

若不使用拉链表,解决方案此处给出两种:

方案一:
每天只留最新的一份,比如我们每天用Sqoop抽取最新的一份全量数据到Hive。

优点很明显,节省空间,一些普通的使用也很方便,不用在选择表的时候加一个时间分区什么的。
缺点

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/105597288