Hive 拉链表

2018-08-20  本文已影响610人  analanxingde

本文中图片引用自:https://blog.csdn.net/houfengfei668/article/details/79619215,文章中还提到了相应的全量增量图,我没有贴过来。

拉链表的定义以及适用场景

1.1定义

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

1.2 适用场景

给出以下一个应用场景

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

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

此时可以考虑使用拉链表。首先它在空间上做了一个取舍,虽说不像方案一那样占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是万分之一。其次它能满足方案二所能满足的需求,既能获取最新的数据,也能添加筛选条件也获取历史的数据

拉链表的算法

很多博客上介绍了拉链表当有更新数据时,采用的算法。本文给出一张更新过程的图与算法过程相结合,简要介绍拉链表的存储更新情况。
算法:

   1、采集当日全量数据到ND(NewDay)表;

   2、可从历史表中取出昨日全量数据存储到OD(OldDay)表;

   3、(ND-OD)就是当日新增和变化的数据,也就是当天的增量,用W_I表示;

   4、(OD-ND)为状态到此结束需要封链的数据,用W_U表示;

   5、将W_I表的内容全部插入到历史表中,这些是新增记录,start_date为当天,而end_date为max值;

   6、对历史表进行W_U部份的更新操作,start_date保持不变,而end_date改为当天,也就是关链操作

根据上述算法说明,下面给出操作的过程图:


拉链表操作例子

注释:

关于hive中,数据拉链的实现,推荐一篇很好的文章:https://blog.csdn.net/zhaodedong/article/details/54177686

上一篇 下一篇

猜你喜欢

热点阅读