当前位置:   article > 正文

数据仓库之拉链表设计与实现_通过hdl生成拉链表

通过hdl生成拉链表

简介:
本文介绍数据仓库技术中拉链表相关的内容,包括其原理、设计、适用场景以及在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. 变化频率不会特别高,按数据仓库建设的时间粒度来区分即可以感知到这种变化
  4. 业务有需求获取历史上某一个时间点的历史快照信息,例如:对过去某个时间的所有数据做统计
    针对于这些情况,一般来说有以下几种方案可选:
  5. 每天删除历史数据,只导入一份最新的数据
  6. 每天抽取一份全量数据,按天存储历史数据
  7. 使用拉链表来设计

使用拉链表的原因
下面我们来针对以上三个方案逐个分析
方案1:
优点:节省空间,使用方便,甚至都不用创建分区。
缺点:没有历史数据,如果需要历史数据只能想办法通过流水表获取,逻辑较复杂。
方案2:
优点:实现简单,最为稳妥。
缺点:因为信息维度多但是变化维度不多,存储了大量的重复数据,对存储空间是极大的浪费。虽然可以做一些取舍只保留一段时间的数据,但是需求方是无耻的,这个时间段可能会逐渐被拉长,以至于必须永久保留数据。
方案3:
优点:可以保留历史快照,且占用空间不大,数据冗余少。
缺点:相比于前两种方案实现较为复杂,如果历史上有某一天数据出现问题则需要一个完整的回溯过程保证全表数据是正常的。
拉链表的逻辑设计
接下来通过一个实例来简述一下应该如何设计拉链表

首先,针对于某账户信息表,在2018年1月1日的信息如下表(为了简化设计,这里增加了信息变更时间UPDATE_DATE࿰

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/255299
推荐阅读
相关标签
  

闽ICP备14008679号