반응형
Airflow에서 1년에 1번 실행하는 DAG의 경우, execution_date
가 실제 실행 시간보다 1년 전이어야 하는지 여부는 Airflow의 스케줄링 동작과 관련이 있습니다.
1. Airflow의 동작 원리
execution_date
의 의미execution_date
는 DAG 실행이 예약된 날짜를 나타냅니다.- 실제 DAG가 실행되는 시간은
execution_date
이후입니다. - 예:
start_date=datetime(2023, 1, 1)
이고schedule_interval='@yearly'
이면, DAG는 2023년 데이터를 처리하기 위해 2024년 1월 1일에 실행됩니다.
- 실행 주기의 타임라인
- Airflow는
schedule_interval
에 따라 스케줄링을 계산하며, DAG는 항상 이전 주기를 처리합니다. - 1년에 1번 실행하는 DAG의 경우:
- 2023년 1월 1일 데이터를 처리하기 위해 2024년 1월 1일에 실행됩니다.
- 2024년 1월 1일 데이터를 처리하기 위해 2025년 1월 1일에 실행됩니다.
- Airflow는
start_date
와execution_date
의 관계start_date
는 스케줄 계산의 기준이 되는 날짜입니다.execution_date
는 해당 DAG가 처리할 데이터의 기준 날짜입니다.
2. 예제
설정 1: start_date=datetime(2023, 1, 1)
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime
default_args = {
'owner': 'airflow',
}
with DAG(
'yearly_execution_example',
default_args=default_args,
start_date=datetime(2023, 1, 1),
schedule_interval='@yearly',
catchup=True,
) as dag:
task = DummyOperator(task_id='run_once_a_year')
- 스케줄 계산:
start_date=datetime(2023, 1, 1)
schedule_interval='@yearly'
- 실행 결과:
- 2024년 1월 1일: 2023년의
execution_date
에 대해 실행됨. - 2025년 1월 1일: 2024년의
execution_date
에 대해 실행됨.
- 2024년 1월 1일: 2023년의
설정 2: start_date=datetime(2024, 1, 1)
with DAG(
'yearly_execution_example_future',
default_args=default_args,
start_date=datetime(2024, 1, 1),
schedule_interval='@yearly',
catchup=False,
) as dag:
task = DummyOperator(task_id='run_once_a_year')
- 스케줄 계산:
start_date=datetime(2024, 1, 1)
schedule_interval='@yearly'
catchup=False
- 실행 결과:
- 2025년 1월 1일: 2024년의
execution_date
에 대해 실행됨. - 과거(2023년)의
execution_date
는 건너뜀.
- 2025년 1월 1일: 2024년의
설정 3: start_date=datetime(2024, 1, 1)
with DAG(
'yearly_execution_example_future',
default_args=default_args,
start_date=datetime(2024, 1, 1),
schedule_interval='@yearly',
catchup=False,
) as dag:
task = DummyOperator(task_id='run_once_a_year')
- 스케줄 계산:
start_date=datetime(2023, 6, 1)
schedule_interval='0 24 1 6 *'
(현재가 24년일 경우)catchup=False
- 실행 결과:
- 2024년 6월 1일: 2024년의
execution_date
에 대해 실행됨.
- 2024년 6월 1일: 2024년의
3. 왜 execution_date
가 1년 전처럼 보이는가?
- Airflow는 과거 데이터를 처리하기 위해 설계됨:
- DAG의 실행은 항상
execution_date
를 기준으로 하며, 이는 현재 실행 시간보다 이전입니다. - 예: 매년 데이터를 처리하는 DAG는 보통 1년 전 데이터를 처리하도록 설정됩니다.
- DAG의 실행은 항상
schedule_interval='@yearly'
의 동작 방식:- 스케줄은
start_date
를 기준으로 1년 단위로 생성되며, 실행은 다음 주기에 발생합니다.
- 스케줄은
4. 1년 전이 아닌 설정이 필요한 경우
만약 실행 시간과 execution_date
가 동일하도록 설정하고 싶다면 timedelta
를 사용해 조정해야 합니다. 하지만 이는 일반적으로 권장되지 않으며, Airflow의 기본 동작을 따르는 것이 더 적합합니다.
5. 요약
- Airflow에서
execution_date
가 1년 전처럼 보이는 이유는 Airflow의 과거 데이터를 처리하는 설계 때문입니다. - DAG가 실행되기 위해
execution_date
가 반드시 1년 전일 필요는 없습니다. 그러나 1년에 한 번 실행하는 스케줄에서는 실행일이 과거 데이터를 처리하는 날짜로 나타납니다.
6. 결론
execution_date는 반드시 1년 전일 필요는 없습니다. 하지만 Airflow의 스케줄링 동작상, 1년에 1번 실행하는 DAG는 과거 데이터를 처리하는 패턴으로 동작하며, 일반적으로 1년 전 데이터를 처리하기 위한 실행 시점으로 간주됩니다.
따라서 start_date를 1년 전으로 설정을 해야 현재 시점 부터 1년 안에 실행될 설정된 1년 주기 실행을 하게 됩니다.
반응형
'Data Mining & Distributed > Airflow' 카테고리의 다른 글
[ Airflow ] RestAPI 사용하기 (0) | 2024.12.31 |
---|---|
[ Airflow ] 1년에 한 번 실행 되는 DAG 설정으로 excution_date 이해하기 (0) | 2024.12.23 |
[ Airflow ] MySQL, PostgreSQL - 기본 Database 설정하고 생성하기 (0) | 2024.12.02 |
[ Airflow ] operator - 여러 개의 operator를 생성해서 병렬 처리 확인하는 Dag 등록하기 (1) | 2024.12.02 |
[ Airflow ] db init - PostgreSQL 과 함께 초기 설정하기 (0) | 2024.12.02 |