赞
踩
简介:
本文介绍数据仓库技术中拉链表相关的内容,包括其原理、设计、适用场景以及在Hive中的实现方式。
拉链表定义:
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。即可以在所规定的时间粒度上体现数据完整的生命周期。
以下为一个拉链表的示例及拉链表的主要表结构,存储账户基本信息和每条记录的生命周期,我们可以拿到每一个账户的历史上任意一天的状态和余额信息。
账户ID | 账户余额 | 账户状态 | 开始时间 | 结束时间 |
---|---|---|---|---|
1 | 100 | 正常 | 2020-01-01 | 2020-01-01 |
2 | 200 | 正常 | 2020-01-01 | 2020-01-01 |
3 | 500 | 正常 | 2020-01-01 | 2020-01-01 |
1 | 900 | 正常 | 2020-01-01 | 2020-03-01 |
3 | 0 | 注销 | 2020-01-01 | 9999-99-99 |
1 | 500 | 正常 | 2020-03-01 | 2020-03-01 |
1 | 300 | 正常 | 2020-01-01 | 9999-99-99 |
2 | 800 | 正常 | 2020-01-01 | 9999-99-99 |
拉链表的使用场景
在数据仓库的数据模型设计中,常常会遇到下列情况:
使用拉链表的原因
下面我们来针对以上三个方案逐个分析
方案1:
优点:节省空间,使用方便,甚至都不用创建分区。
缺点:没有历史数据,如果需要历史数据只能想办法通过流水表获取,逻辑较复杂。
方案2:
优点:实现简单,最为稳妥。
缺点:因为信息维度多但是变化维度不多,存储了大量的重复数据,对存储空间是极大的浪费。虽然可以做一些取舍只保留一段时间的数据,但是需求方是无耻的,这个时间段可能会逐渐被拉长,以至于必须永久保留数据。
方案3:
优点:可以保留历史快照,且占用空间不大,数据冗余少。
缺点:相比于前两种方案实现较为复杂,如果历史上有某一天数据出现问题则需要一个完整的回溯过程保证全表数据是正常的。
拉链表的逻辑设计
接下来通过一个实例来简述一下应该如何设计拉链表
首先,针对于某账户信息表,在2018年1月1日的信息如下表(为了简化设计,这里增加了信息变更时间UPDATE_DATE
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。