大数据之路:阿里巴巴大数据实践——事实表设计

6 阅读5分钟

事实表基础

  • 事实表的本质与目标

    • 本质:记录业务过程可度量的事件,如交易支付、用户点击。

    • 设计目标

      目标实现手段业务场景
      高性能查询预聚合 + 分区剪枝双11实时大屏响应<1秒
      低成本存储列式压缩 + 生命周期管理历史数据OSS归档降本90%
      数据一致性统一原子指标定义集团GMV口径100%统一
      业务可扩展动态添加度量字段新增“碳中和指标”零改造
  • 事实表设计原则

    • 原则1:尽可能包含所有与业务过程相关的事实。
    • 原则2:只选择与业务过程相关的事实。
    • 原则3:分解不可加性事实为可加的组件。
    • 原则4:在选择维度和事实之前必须先声明粒度。
    • 原则5:在同一个事实表中不能有多种不同粒度的事实。
    • 原则6:事实的单位要保持一致。
    • 原则7:对事实的 null 值要处理。
    • 原则8:使用退化维度提高事实表的易用性。
  • 事实表设计四要素

    • 事实类型与可加性

      类型可加性案例聚合规则
      可加事实完全可加交易金额、商品数量SUM()有效
      半可加事实部分可加账户余额、库存量AVG()有效,SUM()失真
      不可加事实不可加比率(如毛利率)需先分子分母分别聚合
    • 粒度(Granularity)设计

      业务过程推荐粒度优势
      交易支付单笔订单级别支持最细粒度分析
      用户行为单次事件级别可回溯原始行为
      财务报表每日账户快照平衡明细与存储成本
    • 一致性事实:通过OneData原子指标统一定义,字段级血缘追踪,DataWorks自动校验下游一致性。

事务事实表

  • 记录对象:业务过程的最小事件单元,如一笔支付、一次点击。

  • 时效性要求:强实时(秒级延迟)。

  • 数据特征:事件一旦发生不再变更(仅追加),与时间强相关(依赖事件时间戳)。

  • 设计关键决策点

    要素阿里规范反例后果
    粒度必须为最小事件单元(如单次点击)合并单日行为 → 路径分析失效
    事实类型仅允许完全可加事实(金额、数量)包含比率字段 → 聚合失真
    时间精度毫秒级时间戳(支持事件序列排序)秒级精度 → 乱序事件关联错误
    分区键按事件日期分区(dt=yyyyMMdd未分区 → 全表扫描PB级数据
  • 小文件治理方案

    问题传统方案阿里自研方案收益
    实时写入小文件多定时Compaction流式小文件合并(SLS)文件数减少90%
    分区热点手动重分布自动分桶均衡(AutoBucket)写入延迟降低60%

周期快照事实表

  • 记录对象:业务实体在固定时间点的全量状态(如每日账户余额、月末库存量)。

  • 业务价值

    业务场景问题阿里解决方案收益
    财务对账无法获取历史每日账户余额每日账户快照表对账效率提升90%
    库存周转分析仅知出入库事件,不知中间状态商品每日库存快照周转计算精度100%
    用户资产分析实时计算用户总资产代价高T+1用户资产快照(含余额/理财/积分)查询耗时<1秒
  • 设计关键决策

    要素阿里规范违反后果
    快照周期按业务需求定制(日/周/月)日快照用于金融,月快照用于HR
    状态事实仅包含半可加事实(余额/库存)错误包含交易金额 → 聚合失真
    分区策略按快照日期分区未分区 → 全表扫描效率低下
    存储格式ORC列存 + ZSTD压缩(LEVEL 15)文本存储 → 空间膨胀5倍

累积快照事实表

  • 记录对象:单笔业务的生命周期关键里程碑,如订单从创建→支付→发货→签收。

  • 业务价值

    业务场景传统方案痛点阿里累积快照方案收益
    订单履约时效分析需关联多表计算节点间隔单表记录全链路时间戳分析效率提升10倍
    保险理赔进度监控无法实时获取当前所处阶段更新当前状态字段 + 时间节点处理超时率下降40%
    物流全链路追踪分散在运单/仓储/配送表整合全环节状态到单表查询延迟<500ms
  • 设计关键决策

    要素阿里规范违反后果
    节点选择关键里程碑≤7个(避免宽表失控)包含20个节点 → 维护灾难
    时间精度统一UTC时间戳(支持跨时区分析)本地时间 → 流程计算错误
    状态更新仅更新当前节点及后续字段修改历史节点 → 数据失真
    分区策略按流程开始日期分区(如订单创建日)按结束日期分区 → 热点问题

三种事实表的比较

维度事务事实表周期快照事实表累积快照事实表
本质记录原子业务事件捕获实体周期性状态追踪业务流程里程碑
数据时效秒级实时(流式写入)T+1批量生成近实时更新(流程推进时更新)
事实类型可加事实(金额/数量)半可加事实(余额/库存)混合事实(时长/状态)
时间字段单一事件时间戳单个快照日期多个时间节点(5-10个)
存储开销低(仅追加,不更新)中(增量合并)高(需更新历史行)
查询性能高(分区剪枝)中(需处理半可加性)低(宽表扫描)
业务场景双11实时交易大屏每日账户余额对账订单全链路时效分析
阿里优化重点小文件合并 + 流式压缩增量计算 + OSS分级存储局部更新 + 时间戳压缩