美文网首页数据库
数仓设计--维度(全量、拉链表)

数仓设计--维度(全量、拉链表)

作者: 熊猫学猿 | 来源:发表于2022-04-22 06:07 被阅读0次

维度属性通常不是静态的,而是会随时间变化的,数据仓库的一个重要特点就是反映历史的变化,所以如何保存维度的历史状态是维度设计的重要工作之一。保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表和拉链表

1)全量快照表

离线数据仓库的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据。这种方式的优点和缺点都很明显

优点是简单而有效,开发和维护成本低,且方便理解和使用。

缺点是浪费存储空间,尤其是当数据的变化比例比较低时。

2)拉链表

拉链表的意义就在于能够更加高效的保存维度信息的历史状态。

拉链表是记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当期日期放入生效开始日期,如果当前信息至今有效,再生效结束日期种填入一个极大值

(1)什么是拉链表

拉链表适合于:数据发生变化,但是变化频率并不高的维度(即:缓慢变化维)

比如:用户信息会发生变化,但是每天变化的比例不高。如果数据量有一定规模,按照每日全量的方式保存效率很低。比如:1亿用户*365天,每天一份用户信息(做每日全量效率低)

通过,生效开始日期<=某个日期且生效结束日期>=某个日期

如果事实表中一条记录在某个维度表中有多条记录与之对应,称为多值维度。例如,下单事实表中的一条记录为一个订单,一个订单可能包含多个商品,所会商品维度表中就可能有多条数据与之对应。

针对这种情况,通常采用以下两种方案解决。

第一种:降低事实表的粒度,例如将订单事实表的粒度由一个订单降低为一个订单中的一个商品项。

第二种:在事实表中采用多字段保存多个维度值,每个字段保存一个维度id。这种方案只适用于多值维度个数固定的情况。

建议尽量采用第一种方案解决多值维度问题

维表中的某个属性同时有多个值,称之为“多值属性”,例如商品维度的平台属性和销售属性,每个商品均有多个属性值。

针对这种情况,通常有可以采用以下两种方案。

第一种:将多值属性放到一个字段,该字段内容为key1:value1,key2:value2的形式,例如一个手机商品的平台属性值为“品牌:华为,系统:鸿蒙,CPU:麒麟990”。

第二种:将多值属性放到多个字段,每个字段对应一个属性。这种方案只适用于多值属性个数固定的情况

相关文章

  • 数仓设计--维度(全量、拉链表)

    维度属性通常不是静态的,而是会随时间变化的,数据仓库的一个重要特点就是反映历史的变化,所以如何保存维度的历史状态是...

  • 从0开始研究数据仓库的一些想法

    研究方向 数仓理论:分层设计理论、维度建模理论基于OLAP数仓:adb/clickhouse/greenplum/...

  • 数仓中的全量表,增量表,拉链表,流水表,快照表

    [数仓中的全量表,增量表,拉链表,流水表,快照表] 预热: 我们先从几个物理概念入手理解什么是流量,存量,增量 (...

  • 数仓—拉链表

    视频链接:数仓实战项目[https://www.bilibili.com/video/BV1bv411x7vr?p...

  • 数据仓库开发规范

    00背景 规范约束是数仓建设的全流程,以及后续的迭代和运维的参照。事实上,数仓规范文档,应该随着架构设计文档,在数...

  • 数仓建模—宽表的设计

    宽表的设计 其实宽表是数仓里面非常重要的一块,前面我们介绍过了维度表事实表,今天我们介绍一下宽表,前面我们说过了数...

  • 数仓建模 - 维度 vs 关系

    数据仓库模型建设 模型概念 维度建模 关系建模 建模实现对比 模型选择 Data Vault 简介 数据仓库模型建...

  • 度量指标

    拉分支到全量部署时间 最后一次代码提交到全量部署的时间

  • 今日学习思路(1.12)

    一、关于数仓的理解: 数仓就是从基础数据里拆出一组数据进行单独的管理,所有跟统计相关的内容都从这个维度去取,效率高...

  • 数仓模型之 拉链表

    Q1 什么拉链表? 拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就要重新开始一条新的记录,并把当前...

网友评论

    本文标题:数仓设计--维度(全量、拉链表)

    本文链接:https://www.haomeiwen.com/subject/lmidertx.html