1. 拉链表简介

拉链,通俗来讲即打开和关闭数据,设计表的时候添加 START_DATE  和  END_DATE 两个字段,数据更新时,通过修改 END_DATE 来设置数据的有效时间。

数据的拉链表只存一份全量数据,其余都是增量数据,查询时使用 START_DATE  和  END_DATE 作为约束条件来筛选某日的数据快照。同时可以节省存储空间,记录历史变化。

关键词:OD(历史数据)、ND(当日数据)、ND-OD(日增量数据)、OD-ND 为状态到此结束需要封链的数据

2. 拉链表适用场景

在银行、电商等企业中,由于每日流水表每日有几千万条记录,数据仓库保存5年数据的话很容易不堪重负,因此使用拉链表的算法来节省存储空间。

另外,工作中如果需要对接数据,数据量大而且要保留快照,不能删除,拉链表也是一个不错的选择,比给数据记录上标识高效很多。

3. 拉链表Demo

(1) 初始数据时,START_DATE 为生命周期开始时间,END_DATE 为生命周期结束时间,默认设置为为最大日期 9999-12-31

hive 拉链表的设计 数据库拉链表设计_数据仓库

2019-03-19 日首次导入全量数据

2000088956694021

300 

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694047

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694062

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694088

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2019-03-20 日导入增量数据

2000088956694021

300 

9999999999

逾期

2019-03-19 00:00:00

9999-03-19 00:00:00

2000088956694021

200

9999999999

逾期

2019-03-20 00:00:00

9999-12-31 00:00:00

2000088956694047

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694062

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694088

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:0

2019-03-21 日导入增量数据

2000088956694021

300 

9999999999

逾期

2019-03-19 00:00:00

2019-03-19 00:00:00

2000088956694021

200

9999999999

逾期

2019-03-20 00:00:00

2019-03-20 00:00:00

2000088956694021

100

9999999999

逾期

2019-03-21 00:00:00

9999-12-31 00:00:00

2000088956694047

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694062

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

2000088956694088

300

9999999999

逾期

2019-03-19 00:00:00

9999-12-31 00:00:00

这样的历史拉链表可以不用删除历史数据,只要每天将新增的数据insert,有状态更新的账户update即可,既能满足对历史数据的需求,又能很大程度的节省存储资源。同时对于日增几百万的数据也能很好的处理;

注意: 拉链的实际操作语句可以自己网上找资源理解,原理很简单:先关链 -> 再开链

(2) 查询历史快照

(查询2019-03-19 日导入数据的历史快照

SELECT * FROM `source_account_zipper` t where t.START_DATE<='2019-03-19' and t.END_DATE>='2019-03-19'

hive 拉链表的设计 数据库拉链表设计_拉链算法_02

(查询2019-03-20 日导入数据的历史快照

SELECT * FROM `source_account_zipper` t where t.START_DATE<='2019-03-20' and t.END_DATE>='2019-03-20'

hive 拉链表的设计 数据库拉链表设计_数据_03

(查询2019-03-21 日导入数据的历史快照

SELECT * FROM `source_account_zipper` t where t.START_DATE<='2019-03-21' and t.END_DATE>='2019-03-21'

hive 拉链表的设计 数据库拉链表设计_拉链表_04

拉链的DDL语句将在下一篇博客更新。。。,敬请期待!!!