首页/数据/数仓建模速查/累积快照的原地更新实现
维度与事实设计149 条

累积快照的原地更新实现

累积快照随流程推进更新同一行:用 MERGE 或「全分区重写」实现幂等更新,里程碑时间戳只允许从空到有、不可回退。

数仓建模速查数据更新于 2026-10-12
更新MERGE / 分区重写
约束时间戳单调
风险重复更新竞态

MERGE 更新

MERGE 更新
MERGE INTO fact_order_flow t
USING stg_order_flow s ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET
  t.pay_ts = coalesce(t.pay_ts, s.pay_ts),
  t.ship_ts = coalesce(t.ship_ts, s.ship_ts)
WHEN NOT MATCHED THEN INSERT VALUES (s.order_id, s.create_ts, s.pay_ts, s.ship_ts);
用 coalesce 保留首次到达的里程碑时间,避免补数回退已完成节点。

易错点

  • 时间戳被后批小值覆盖,环节耗时出现负数
  • 并发更新抢同一行,里程碑丢失

数据来源与参考

  • 数据仓库工具箱:累积快照事实表
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌