首页/数据/数仓建模速查/维度历史重建(全量重放)
维度与事实设计149 条

维度历史重建(全量重放)

当跟踪规则或来源补全历史时,需要按源端变更日志全量重放:从最早变更点到今天逐批执行合并逻辑,产出完整版本链。

数仓建模速查数据更新于 2026-10-13

什么时候要全量重放

当跟踪规则调整、来源补全历史、或者维度表本身被破坏时,需要按源端变更日志从最早变更点逐批执行合并逻辑,重建完整的版本链。前提是源端保留变更日志或 CDC 记录;重放使用的合并代码必须与日常加载完全相同,否则两套逻辑迟早出现差异。

基本信息

前提条件源端有变更日志或 CDC 记录
执行步骤备份维表、逐批重放、逐环对账、切换消费
代码复用重放与日常加载共用同一套合并逻辑
校验内容版本区间连续、无重叠、每键单当前行
主要风险重放期间下游读到中间状态

典型使用场景

  • 跟踪列变更:新增跟踪属性后按新规则重建历史
  • 历史补全:源端补传早期数据后重放生成完整版本
  • 损坏修复:维表被误删或写坏后重放恢复
  • 逻辑升级:修复合并逻辑缺陷后重建受影响区间
  • 环境初始化:新建环境时按变更日志生成维度

全量重放流程

全量重放流程
# 全量重放的四步
1. 备份当前维表,保留可回滚的副本
2. for batch in 变更日志按时间排序:
       merge_dimension(batch)   # 与日常加载共用同一套逻辑
3. 校验:版本区间连续、无重叠、每键仅一个当前行
4. 切换:校验通过后再让下游切换到重建结果

四阶段与风险

阶段关键动作风险
准备备份现有维表不备份则无法回滚
重放按批执行合并逻辑代码与日常加载不一致
校验区间连续性与唯一当前行跳过校验直接上线
切换下游改用重建结果重放期间被下游读取
重放脚本与日常合并要共用同一份代码:两份实现迟早产生差异,届时无法判断哪一份结果才是正确的。
重放期间要隔离下游读取:中间状态的版本链并不完整,报表会出现同一实体重复计数或缺少当前行。

易错点

  • 重放逻辑与日常逻辑是两份代码:结果不一致,以谁为准说不清
  • 重放期间下游照常消费:读到中间状态,指标出现异常
  • 源端没有变更日志:只能靠全量快照反推,历史区间不准确
  • 重放前不备份:出错后无法回到重放前的稳定状态
  • 重放任务与日常任务并发执行:产生重复版本与区间冲突

数据来源与参考

  • 数仓工程实践:维度历史重建
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌