回填与补数是什么
补数是按指定日期区间重跑历史任务:上游缺数要补、口径变更要重刷、任务失败要重跑,都属于这一类。它的本质是「用同一套逻辑再算一遍」,因此有两个前提必须成立:任务本身幂等(重复跑结果一致)、产物按分区组织(只覆盖目标分区而不动其他日期)。做到这两点,补数才是可控的日常操作而不是事故源。
基本信息
| 典型场景 | 上游缺数、口径调整、任务失败重跑 |
|---|---|
| 常见粒度 | 按天、按小时或指定区间 |
| 必要护栏 | 限并发、错峰、先小范围验证 |
| 前置条件 | 任务幂等、按分区写入、补数可追溯 |
| 影响面 | 同时打满数据源、计算资源与下游库 |
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 核对本机版本;补数期间建议临时下调调度并发,避免与日常周期任务争抢资源。