에어플로우에서 과거 기간 데이터를 채우는 방법은 총 2가지(catchup, backfill)가 있습니다.
dag을 활성화할 때, start_date부터 end_date 까지 모두 실행하는 기능입니다. (end date 미설정시 현재 시간까지의 기간을 실행합니다.)
예를들어, start_date=’2023-07-01’, end_date=’2023-08-03’이라면 23년 7월 1일 부터 8월 3일까지 실행합니다.
dag_params에서 설정할 수 있으며, catchup을 키려면 True로 설정하면 됩니다.
(보통 job이 한번에 실행되는 것을 막기 위해 False로 설정되어 있습니다.)
# catchup 예시 코드
from airflow.models.dag import DAG
from airflow.operators.bash import BashOperator
import datetime
import pendulum
dag = DAG(
"tutorial",
default_args={
"depends_on_past": True,
"retries": 1,
"retry_delay": datetime.timedelta(minutes=3),
},
start_date=datetime(2023, 7, 1),
end_date=datetime(2023, 8, 3)
description="A simple tutorial DAG",
schedule="@daily",
catchup=True,
)
하지만, 과거 특정 날짜를 채우기 위해 이미 생성된 dag의 파라미터를 조정하는건 어려울 수 있습니다.
이럴 때 사용하기 좋은 것이 backfill 입니다.
airflow CLI 에서 backfill 명령어를 실행하면 됩니다.
# backfill 예시 코드
airflow dags backfill \
--start-date START_DATE \
--end-date END_DATE \
dag_id
이미 생성된 잡의 과거 데이터를 채우고 싶은데, airflow CLI로 backfill도 하기 어렵다면 어떻게 해야 할까요?
해당 잡을 복사하고, catchup=True로 설정한 뒤에 dag id를 다르게 설정하여 채워넣을 수도 있습니다.
개인적으로 backfill을 하는 것보다 이 방법이 가장 깔끔하고 편했습니다.