Backfill — 과거 날짜 재처리
Apache Airflow Official Documentation (in-repo snapshot) — Apache Software Foundation core-concepts/backfill.rst 전체
이 모듈을 다 읽으면
- Backfill의 세 가지 재처리(reprocess) 옵션의 차이를 설명할 수 있다
- Backfill의 max_active_runs가 Dag 레벨 설정과 어떻게 독립적인지 설명할 수 있다
- 파티션 기반 타임테이블 Dag의 backfill이 일반 backfill과 어떻게 다른지 설명할 수 있다
Backfill은 Dag의 과거 날짜에 대한 run을 CLI나 REST API로 생성하는 기능이다. 이 모듈은 세 가지 재처리 정책, backfill 전용 동시성/실행 순서 제어, 그리고 파티션 기반 타임테이블 Dag에서 backfill이 어떻게 다르게 해석되는지를 다룬다.
Backfill 개념과 재처리 옵션
Backfill은 Dag의 과거 날짜에 대한 run을 생성하는 것이다. Airflow는 CLI와 REST API로 이 메커니즘을 제공한다. Dag, 시작 날짜, 종료 날짜를 주면 Airflow가 Dag의 스케줄에 따라 그 범위 안의 run들을 생성한다. 시간 기반 스케줄이 없는 Dag에는 backfill이 의미가 없다.
데이터 재처리 동작에는 세 가지 옵션이 있다. none은 해당 논리적 날짜에 이미 run이 있으면 그 상태와 무관하게 새로 만들지 않는다. failed는 run이 존재할 때 그 상태가 failed이면 그 날짜의 새 run을 만든다. completed는 run이 존재할 때 상태가 completed이거나 failed이면 새 run을 만든다. 선택한 재처리 정책과 무관하게, 해당 날짜의 최신 run이 아직 running이거나 queued 상태면 새 run을 만들지 않는다.
핵심 포인트
- reprocess-behavior는 none/failed/completed 세 가지이며, 이미 있는 run의 상태에 따라 재생성 여부가 갈린다
- 선택한 재처리 정책과 무관하게, 최신 run이 running/queued 상태면 새 run을 만들지 않는다
- 시간 기반 스케줄이 없는 Dag에는 backfill이 의미가 없다
동시성 제어와 실행 순서
backfill에 max_active_runs를 설정하면 그 backfill 안에서 동시에 실행할 수 있는 Dag run 수를 제어할 수 있다. 이 backfill의 max_active_runs는 Dag 자체의 max_active_runs 설정과 독립적으로 적용된다. --run-backwards CLI 옵션을 쓰면 최신 날짜부터 역순으로 backfill을 실행할 수 있다.
dry run은 backfill이 어떤 날짜에 대해 run 생성을 고려할지 미리 출력해주는 CLI 옵션이다. 실제로 생성될지 여부는 선택한 재처리 정책과, backfill을 실제로 실행하는 시점의 해당 범위 내 기존 run들의 상태에 달려 있다.
핵심 포인트
- backfill의 max_active_runs는 Dag 자체의 max_active_runs와 독립적으로 적용된다
- --run-backwards로 최신 날짜부터 역순 실행이 가능하다
- dry run은 대상 날짜만 미리 보여줄 뿐 실제 생성 여부는 실행 시점의 상태에 달려 있다
CLI/UI 예시와 파티션 Dag Backfill
CLI 예시: `airflow backfill create --dag-id tutorial --from-date 2015-06-01 --to-date 2015-06-07 --reprocess-behavior failed --max-active-runs 3 --run-backwards --dag-run-conf '{"my": "param"}'`. UI에서는 Dag 상세 페이지에서 Trigger를 누르고 팝업에서 Backfill을 선택한 뒤, 날짜 범위(From/To), 재처리 방식(Missing Runs / Missing and Errored Runs / All Runs — 각각 CLI의 none/failed/completed에 대응), 최대 동시 run 수, 역순 실행 여부, JSON 형태의 dag_run.conf, 필요하면 Dag 언포즈까지 설정한다.
CronPartitionTimetable처럼 파티션 기반 타임테이블을 쓰는 Dag는 동일한 --from-date/--to-date 플래그를 쓰지만, Airflow가 Dag가 파티션 기반임을 자동으로 감지해 그 날짜 범위를 파티션-날짜 범위로 해석한다 — 즉 그 구간의 각 파티션마다 Dag run이 하나씩 생성된다. 동시성 제어는 일반 backfill과 동일하게 --max-active-runs로 한다.
핵심 포인트
- UI의 reprocess behavior 라벨(Missing Runs/Missing and Errored Runs/All Runs)은 CLI의 none/failed/completed에 대응한다
- CronPartitionTimetable 같은 파티션 기반 Dag는 같은 --from-date/--to-date 플래그를 파티션 범위로 해석해 파티션당 run을 하나씩 만든다