事实表基础
-
事实表的本质与目标
-
本质:记录业务过程可度量的事件,如交易支付、用户点击。
-
设计目标
目标 实现手段 业务场景 高性能查询 预聚合 + 分区剪枝 双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分级存储 | 局部更新 + 时间戳压缩 |