回填与补数流程

补数按指定日期区间重跑历史:用于上游故障补数据、口径变更重刷、修复断链。补数要限并发、先评估下游影响,并保证任务幂等。

回填与补数是什么

补数是按指定日期区间重跑历史任务:上游缺数要补、口径变更要重刷、任务失败要重跑,都属于这一类。它的本质是「用同一套逻辑再算一遍」,因此有两个前提必须成立:任务本身幂等(重复跑结果一致)、产物按分区组织(只覆盖目标分区而不动其他日期)。做到这两点,补数才是可控的日常操作而不是事故源。

基本信息

典型场景上游缺数、口径调整、任务失败重跑
常见粒度按天、按小时或指定区间
必要护栏限并发、错峰、先小范围验证
前置条件任务幂等、按分区写入、补数可追溯
影响面同时打满数据源、计算资源与下游库

Airflow 2.x 回填命令

Airflow 2.x 回填命令
# 整体回填一段区间
airflow dags backfill -s 2026-10-01 -e 2026-10-07 daily_orders
# 结合并发限制:先改 max_active_runs,或只补单日验证
airflow dags backfill -s 2026-10-01 -e 2026-10-01 daily_orders
# 常用附加开关
airflow dags backfill -s 2026-10-01 -e 2026-10-03 daily_orders --reset-dagruns
airflow dags backfill --help    # 不同大版本参数有差异,以本机帮助为准

典型使用场景

  • 上游采集断了几小时,按小时粒度补齐缺失分区
  • 指标口径调整,需要重刷历史区间让全量数据保持同一口径
  • 下游发现某天结果异常,重跑该天并核对与上下游的差异
  • 新上线任务需要追历史,用回填一次性生成过去若干周期的结果
  • 演练与验收:在独立环境回填一小段区间验证逻辑再上生产

补数前置检查

检查项为什么怎么确认
是否幂等重跑不能产生重复或错乱数据看写入方式是否为覆盖分区或按主键 upsert
写入粒度只覆盖目标分区确认按 dt 分区且不整表覆盖
资源评估回填会瞬间抬高负载估算并发数与峰值读写量
下游影响重刷会改变下游已消费的结果通知下游并确认是否需要联动重跑
回滚方案改错口径要能恢复保留旧产物或临时目录可回切
补数任务与在跑的当日任务并发写同分区会互相覆盖;写同表的补数要串行或加分区级互斥。
不同 Airflow 大版本的回填命令与参数有差异,执行前用 --help 核对本机版本;补数期间建议临时下调调度并发,避免与日常周期任务争抢资源。

易错点

  • 一次性补几个月并发跑,会把数仓与下游库压垮,先估算资源并分批推进
  • 补数前没备份或没确认幂等,口径变更补数可能把正确数据刷坏
  • 回填时开了 catchup 却忘了限制并发,调度器会把历史区间全部同时放出来
  • 只补了上游没补下游,上下游数据版本不一致,对账时更难定位
  • 补数覆盖分区却不清理旧文件,残留数据与新村数据混在一起

数据来源与参考

  • Apache Airflow 官方文档:Backfill(CLI 与调度行为)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌