累积快照事实表是什么
累积快照事实表用于跟踪有明确终态的流程,比如下单、支付、发货、签收。它的特点是流程里各个里程碑的时间戳都放在同一行,一行代表一个流程实例,随着流程推进不断原地更新。用途集中在漏斗转化率与环节耗时分析上,比如支付到发货平均间隔多少小时。它是少数允许更新的事实表形态,因此必须处理重复更新与并发写冲突。
基本信息
| 一行 | 一个流程实例,如一个订单 |
|---|---|
| 更新方式 | 里程碑推进时原地更新对应时间戳列 |
| 关键列 | 各里程碑时间戳 + 当前所处阶段 + 各项金额 |
| 用途 | 漏斗转化率、环节耗时、流程异常滞留 |
| 风险点 | 重复更新与竞态导致时间戳被覆盖 |
典型使用场景
- 订单履约时效:统计下单到支付、支付到发货的各段耗时
- 漏斗转化:按阶段统计未完成数量,定位哪一环滞留最多
- 异常订单监控:某阶段停留超过阈值时触发预警,如支付未发货超过两天
- 服务工单跟踪:受理、处理、关闭三个节点的时间戳同行维护
- 物流节点分析:揽收、转运、签收各节点耗时与超时率
耗时与漏斗查询
耗时与漏斗查询
-- 支付到发货的平均耗时(小时)
SELECT avg(timestampdiff(hour, pay_time, ship_time)) AS ship_hours
FROM fact_order_flow
WHERE dt = '2026-10-11'
AND ship_time IS NOT NULL; -- 未发货订单不参与耗时计算
-- 各阶段滞留数量:用于漏斗与异常监控
SELECT count(1) AS total,
sum(if(pay_time IS NULL, 1, 0)) AS wait_pay,
sum(if(pay_time IS NOT NULL AND ship_time IS NULL, 1, 0)) AS wait_ship
FROM fact_order_flow
WHERE dt = '2026-10-11';使用与误用
| 指标类型 | 是否适用 | 说明 |
|---|---|---|
| 转化率与耗时 | 适用 | 里程碑同行,计算两两时间差最直接 |
| 事件计数 | 不适用 | 未完成实例尚未填齐里程碑,会被漏算 |
| 阶段分布 | 适用 | 按当前阶段列分组即可 |
| 历史回溯 | 需谨慎 | 原地更新后不保留中间态,需配合状态事实表 |
累积快照是少数允许更新的事实表,但要防重复更新:同一里程碑被多次回填时,必须以最早或最晚一次为准并写进文档,否则耗时会变成负数或异常小。
如果需要事件级的完整轨迹,累积快照并不能替代状态事实表:它只保留里程碑时间,中间过程被覆盖掉了。