← 中文资源

简体中文版本

幂等数据管线重放工作流

用确定性键与 upsert 让管线可安全重放,重跑同一窗口不会产生重复数据。

阅读英文原文

目标

管线应在任意窗口可安全重放,以便从失败或逻辑缺陷中恢复。本工作流为每条记录定义跨运行稳定一致的键,用 merge/upsert 按键写入使重跑收敛到同一状态,限定重放窗口只覆盖受影响分区,并验证重跑后行数与校验和不变。

步骤要点

  1. 为记录定义跨运行稳定的确定性键。
  2. 用 merge/upsert 按键写入。
  3. 限定重放只覆盖受影响窗口。
  4. 验证重跑后行数与校验和不变。
MERGE INTO events AS t
USING staging_events AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT ...;

验证

按顺序执行上述步骤后,逐项确认每个步骤的预期状态均已满足;只有全部预期状态成立,才认为本流程完成。若某一步未达到预期状态,应先按排错提示排查,不要跳过继续,以免掩盖问题。

排错提示

  • 仅追加写入会在重放时产生重复。
  • 过宽的重放窗口会波及无关数据。
  • 忽略删除会留下陈旧行。

适用边界

  • 需要支持 merge 的数仓。
  • 删除需用墓碑传播。