Hive拉链表设计方案

一、拉链表的定义及使用场景

定义:所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

使用场景:举个栗子,现有一张内含1000万数据的订单表,每天都有100左右的订单状态会变化,因业务需求要回溯某个历史节点的一笔订单的状态
现有两种处理方式:
1.比较原始的做法,对每天的数据做切片表,查看对应时间的切片表可以得到该订单的历史状态,但是若一笔订单在状态一天内多次变化,切片表只会保留当天最后的状态,若是把粒度缩小为小时级别的切片表,多张切片表会产生大量重复的冗杂数据浪费空间。
2.使用拉链表,首先拉链表将所有数据录入,加上状态标识为当前有效,当某条数据的更新时间变化之后,把拉链表保留的该条数据标识为无效,新插入更新后的数据标识为有效。在设计中经常用有效期开始时间和结束时间来判定数据的有效与否。

二、设计方案

1.初始化
在这里插入图片描述
将原始表的所有数据导入拉链表,初始化有效时间,有效时间start_date为数据的创建时间和更新时间较大的那项,而end_date为max值。

2.拉链表的每日更新
在这里插入图片描述

  • 将原始表创建时间为当前时间的数据插入拉链表,初始化有效时间有效时间start_date为当天,而end_date为max值。

  • 将原始表更新时间为当天的数据插入拉链表,初始化有效时间有效时间start_date为当天,而end_date为max值。拉链表对应的该条历史数据start_date保持不变,而end_date改为当天(重点)

三、拉链表的使用

在这里插入图片描述

  • 查询所有账户当前最新情况:select * from table where end_date=9999/12/31
  • 查询某账户历史情况:如查b账户2020/01/09的情况
    select * from table where id =b and start_date<=2020/01/09 and end_date>2020/01/09
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值