数据仓库之-历史数据存储方案

现状:隔一段时间去数据中心获取一次数据,每次获取数据时只有极少部分数据会发生变更,但是系统需要溯源数据变更的情况。

方案:
现状表+历史表结合的方式:
现状表:即数据的当前、最新状态的表;基本上可以认为是目前的数据不变;
历史表:即保存数据的历史变更记录,通过这个记录可以还原出数据的所有变更情况;
根据业务情况,可以查询现状表或者历史表。

技术实现:
将全量数据存储在Hbase中,现状数据另存一份到Hive中。
查询历史数据有两种方案,一种是 Hbase 表通过外表的方式映射成对应的Hive表,应用层通过类sql的方式查询对应的Hbase库。另一种搭建 Phoenix 环境,应用层通过类sql方式访问Phoenix 关联的Hbase数据库。目前笔者采用的是第一种方式。主要原因是目前该数据仓库对外提供数据是以Hive Jdbc方式,缺点是效率不高。

历史拉链表原理简述:

样例数据如下:
这里写图片描述

存储成历史拉链表的方式如下:
这里写图片描述

1、结束时间为9999-12-31为当前有效数据
2、查询2017-6-2时机构情况: select * from tableName where start_date <= ‘2017-6-2’ and end_date >= ‘2017-6-2’

由上述样例可以发现当数据更新时只有发生变更的数据会被保存,也就是说该方式数据的冗余量比较小。

具体样例如下:
表说明:
t_hbase_person_his10 源数据存储在Hbase,t_hbase_person_his10 为源数据映射成的Hive表,数据量1000万;

如下当前的数据(通过Hive查询):
sql : SELECT ID,NAME, SALARY, MOBILE, START_DATE, END_DATE FROM t_hbase_person_his10 where end_date = ‘9999-12-31’ LIMIT 30;
这里写图片描述

查询 ‘2017-09-18’ 的数据(通过Hive查询):
SELECT ID,NAME, SALARY, MOBILE, START_DATE, END_DATE FROM t_hbase_person_his10 where start_date <= ‘2017-09-18’ and end_date >= ‘2017-09-18’ LIMIT 30;
这里写图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值