聚合事实表是什么
聚合事实表是对明细事实按高频维度组合预先算好的结果表,比如按日 × 渠道 × 品类汇总的销售表。它用空间换性能:报表不必扫描上亿行明细,直接从聚合表取数。代价是多了一条要与明细保持一致的口径链路,因此必须声明可上卷的维度范围,并定期与明细对账,否则两套实现迟早分叉。
基本信息
| 来源 | 由明细事实表按固定维度组合预聚合得到 |
|---|---|
| 常见粒度 | 日 × 渠道 × 品类、月 × 地区 × 商品线 |
| 可上卷范围 | 只包含维度的上层属性,明细维度不可用 |
| 一致性要求 | 与明细同源同口径,禁止两套独立实现 |
| 运维要求 | 有对账作业,偏差超阈值即告警 |
典型使用场景
- 高频看板:日报表固定按日渠道品类展示,走聚合表秒级响应
- 大数据量报表:明细百亿行无法直查,必须预聚合
- 固定口径指标:指标口径稳定、维度组合固定的场景最适用
- 成本优化:降低扫描量与计算资源,尤其是按次计费的引擎
- 历史回算:口径变更后批量重算聚合表,而不是让报表实时算
- 临时补数:明细不可用时用聚合表兜底(需注明上限)
聚合与对账
聚合与对账
-- 1) 生成聚合表:来源是与明细相同的明细事实
INSERT INTO fact_order_agg_d
SELECT dt, channel, category_id,
sum(gmv) AS gmv,
count(1) AS order_cnt,
count(distinct user_id) AS buyer_cnt
FROM fact_order
WHERE dt = '2026-10-11'
GROUP BY dt, channel, category_id;
-- 2) 与明细对账:两边必须相等,差异即为口径漂移
SELECT sum(gmv) FROM fact_order WHERE dt = '2026-10-11'
UNION ALL
SELECT sum(gmv) FROM fact_order_agg_d WHERE dt = '2026-10-11';聚合取舍对照
| 维度组合 | 收益 | 风险 |
|---|---|---|
| 日 × 渠道 × 品类 | 高频查询提速明显 | 品类树调整后需重算历史 |
| 月 × 地区 | 月报最常用 | 跨月上卷受口径影响 |
| 含去重指标(UV) | 报表口径统一 | 不可再跨维度上卷,需合并算法支持 |
| 含比率指标 | 响应快 | 比率不能跨粒度相加,必须按分子分母算 |
| 全量维度笛卡尔 | 上卷最灵活 | 行数爆炸,收益被抵消 |
聚合表与原明细必须两条链路都可用:只建聚合不建明细,任何下钻需求都会变成事故。比率类指标只能存分子与分母并现算,直接存比率再跨维度平均是最常见的错误用法。