Hive表类型及使用技巧-拉链表

拉链表

一、数据加工和维护

  1. 概念:
    所谓拉链表就是记录一个事物从开始 一直到当前状态的所有变化信息;通过比较,记录数据的生命周期,能够快速还原任意天的历史快照,而非全量的每天记录所有数据,因此极大节省了存储。
    一般表名后面xxx_chain
  2. 数据加工方式:
    (1)拉链表中一般会存在一个字段“start_date”表示该记录的起始时间,不代表创建时间,非业务时间。一把会存在"createtime"表示该条记录的创建时间。
    (2)分区:一般dp分区包含线上(‘ACTIVE’)、过期(‘EXPIRED’)其中ACTIVE表示当前线上状态。还会有end_date分区记录数据有效期的截止日期。dt分区表示记录加工的时间分区,因此end_date和dt一般相同。
    (3)有些情况,dp中还存在HISTORY分区,和生产系统对应。
    (4)dp='ACTIVE’每日都会保持与线上数据一致,其有效截止日期end_date一般会设置成一个较大的值,比如’4712-12-31’ 。
  3. 举例:
    id=1记录发生了变化,而id=4是新增的记录。

Hive表类型及使用技巧-拉链表_第1张图片
EXPIRED分区只关注发生变化的记录,ACTIVE是最新的线上数据。

二、查询规则

  1. 某一天历史快照,该天线上数据(历史上该天时的ACTIVE)

select * from xxx_chain where start_date<=MY_DATE and end_date>MY_DATE

  1. 某天新生成的数据
select * from xxx_chain
where start_date>=MY_DATE and substr(createtime,1,10)=MY_DATE

为了减少数据量,可以限制分区end_date>=MY_DATE

  1. 某段时间新生成的数据
select * from xxx_chain
where start_date>=MY_DATE1 and substr(createtime,1,10)>=MY_DATE1 and substr(createtime,1,10)<=MY_DATE2

为了减少数据量,可以限制分区end_date>=MY_DATE1

  1. 线上最新数据

(1)与历史快照相同,当前的历史快照就是当前最新数据

select  from xxx_chain
where start_date<=MY_DATE and end_date>MY_DATE

(2)根据ACTIVE

 select  from xxx_chain
    where dp='ACTIVE'

(3)存在结转HISTORY分区

select  from xxx_chain
where dp in ( 'ACTIVE','HISTORY')

你可能感兴趣的:(Hive,大数据,Hive,拉链表,数据仓库,大数据)