[Airflow] 과거 기간 데이터 채우기(catchup, backfill)

Hyerim Lee·2023년 8월 24일
1

Data Engineering

목록 보기
1/4

에어플로우에서 과거 기간 데이터를 채우는 방법은 총 2가지(catchup, backfill)가 있습니다.

catchup

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,
)

backfill

하지만, 과거 특정 날짜를 채우기 위해 이미 생성된 dag의 파라미터를 조정하는건 어려울 수 있습니다.

이럴 때 사용하기 좋은 것이 backfill 입니다.

airflow CLI 에서 backfill 명령어를 실행하면 됩니다.

# backfill 예시 코드
airflow dags backfill \
    --start-date START_DATE \
    --end-date END_DATE \
    dag_id

airflow CLI를 사용하기 어렵다면?

이미 생성된 잡의 과거 데이터를 채우고 싶은데, airflow CLI로 backfill도 하기 어렵다면 어떻게 해야 할까요?

해당 잡을 복사하고, catchup=True로 설정한 뒤에 dag id를 다르게 설정하여 채워넣을 수도 있습니다.

개인적으로 backfill을 하는 것보다 이 방법이 가장 깔끔하고 편했습니다.

profile
Data Analyst

0개의 댓글