• 维度建模之事实表的设计经验分享


    系列文章目录

    1. 维度建模之数据接入经验分享
      其一离线数据接入:Sqoop数据接入的经验分享和思考
      其二实时数据接入:待更新
    2. 维度建模之事实表的设计经验分享
    3. 维度建模之维度表的设计经验分享
    4. 维度建模之汇总分析表的设计经验分享
    5. 维度建模之应用层报表的设计经验分享


    前言

    从数据仓库到数据中台,再到数据湖,最后到现在新提出的湖仓一体,存算分离。大数据的生态越来越丰富,新技术层出不穷。其中批处理这个分支,是指将各类数据归一到数据仓库,定时处理后给下游各种应用场景使用,而维度建模正适用于这种大数据量,复杂的场景,通过构建庞大的重型模型,提高复用率,这就是所谓的用空间换时间。
    本文主要分享我在数仓开发过程中事务事实的设计经验,供大家参考,如有不正确之处,请评论指正,我们共同进步。


    一、事实表的概念

    (一)何为事实

    本人的理解,事实大部分是指一个动作,是业务过程的体现。比如用户下单这个动作,用户登录这个动作,都可以抽象形成事实。

    (二)事实表的结构

    事实表中主要包含事实事件所产生的度量,用于关联的外键,退化的维度等。
    举个例子,电商用户下单这个动作,可以抽象形成订单事实表,该事实表用来记录用户下单这个过程产生的数据,比如购买商品的数量,金额等度量,订单号,订单状态,用户ID等维度

    二、事实表的主要种类及其应用场景

    (一)事务事实表

    1. 概念

    事务事实表的一行对应空间或时间上某点的度量事件。

    2. 应用场景

    例如,用户页面点击情况的日志记录。这类日志通常是以打点的形式按时间顺序记录下来,历史的数据并不会改变。

    (二)周期快照事实表

    1. 概念

    周期快照表的每行汇总了发生在某一标准周期,如某一天、某周、某月的多个度量事件。

    2. 应用场景

    例如,用户年下单量,下单金额。

    (三)累计快照事实表

    1. 概念

    累计快照表的行汇总了发生在过程开始和结束之间可预测的步骤内的度量事件。

    2. 应用场景

    例如,用户交易累计快照。

    (四)无事实的事实表

    1. 概念

    尽管多数度量事件获取的结果是数字化的,但也存在某些事件仅仅记录一系列某一时刻发生的多维实体。

    2. 应用场景

    例如,在给定的某一天发生的学生参加课程的事件,可能没有可记录的数字化事实,但该事实行带有一个包含日历天、学生、教师、地点、课程等定义良好的外键。利用这样无事实的事实表也可以分析发生了什么。

    三、设计思路总结

    1. 事实表的设计完全依赖于物理活动,不受可能产生的最终报表的影响;
    2. 事实表的粒度应该尽可能地使用数据源最细粒度,这样可以使其更有方便于下游多种场景的复用,比如事实表中是细分到天粒度,下游可以汇总成天粒度,也可以汇总成月粒度;
    3. 通常会将多个维度退化在事实表里,方便下游直接取数。

    四、参考书籍

    1. 《数据仓库工具箱(第3版)——维度建模权威指南》【美】Ralph Kimball & Margy Ross 著
    2. 《大数据之路——阿里巴巴大数据实践》阿里巴巴数据技术及产品部 著
  • 相关阅读:
    【算法笔记(六)】检索算法
    科技型中小企业申报时间?
    EventLoop
    还搞不明白“响应式编程”,那得看这篇
    Spark scala编程练习题——通过日志统计网站访问量
    linux 配置安装node.js
    redis的详解和项目应用(一)
    vant3 list 的坑
    内存中的buffer与cache
    SuperBuilder的用法,此时不要用Builder
  • 原文地址:https://blog.csdn.net/zhangliushi/article/details/126040232