Airflow는 DAG에 적절한 값을 통해 스케줄 간격을 정의하여 정기적으로 실행할 수 있다.
DAG를 초기화할 때 schedule_interval을 설정하여 스케줄 간격을 정의할 수 있다.
해당 값의 default는 None이며 DAG가 예약 실행되지 않고, UI 또는 API를 통해서 수동으로 트리거 된다.
1. 스케줄 간격 및 시작 날짜 정의
import datetime as dt
# ...생략...
dag=DAG(
dag_id="schedule_examples",
schedule_interval="@daily", # 매일 자정에 실행되도록 DAG를 스케줄하는 매크로
start_date=dt.datetime(2023.1.1), # 2023.1.1 부터 DAG 실행 스케줄을 시작할 날짜/시간
end_date=dt.datetime(2023.12.31), # 2023.12.31 까지 DAG가 실행된다.
# ...생략...
)
만일 오늘 날짜가 2023.1.1 이라면
위와 같은 스케줄에서는 start_date에 의해 가장 빠른 자정인 2023.1.2 00:00에 DAG를 실행하게 된다.
동일하게 end_date에 의해 2023.12.31 00:00에 해당 DAG의 스케줄은 종료된다.
2. Cron 기반의 스케줄 간격 설정
Cron 이란 unix기반 OS에서 사용하는 시간 기반 스케줄러이다.
총 5개의 구성요소가 있으며 차례대로 분, 시간, 일, 월, 요일 을 가르킨다.
# 정시 수행
0 * * * *
# 매일 수행
0 0 * * *
# 매주 일요일 수행 (일 ~ 월 : 0 ~ 6)
0 0 * * 0
# 매일 00시 12시 수행
0 0,12 * * *
3 Airflow의 스케줄 간격 약어(매크로)
@once : 1회만 실행하도록 스케줄
@houly : 매시간 변경 시 1회 실행
@daily : 매일 자정에 1회 실행
@weekly : 매주 일요일 자정에 1회 실행
@monthly : 매월 1일 자정에 1회 실행
@yearly : 매년 1월 1일 자정에 1회 실행
4 빈도 기반의 스케줄 간격 설정
Cron으로는 3일 간격으로 실행해야 하는 스케줄은 매달 30, 31일, 1일 등으로 인해 표현이 불가능하다.
ex > 1,4,7,...,31 ( 31일과 1일의 간격은 하루 이다)
그렇기 때문에 datetime 모듈에 포함된 timedelta를 이용하여 스케줄을 정의한다.
import datetime as dt
# ...생략...
dag=DAG(
dag_id="schedule_examples",
schedule_interval=dt.timedelta(days=3), # DAG가 시작 시간으로부터 3일마다 실행된다
# 현재 최초 실행은 2023.1.4일이다.
# timedelta(minutes=10), timedelta(hours=2) 또한 가능
start_date=dt.datetime(2023.1.1), # 2023.1.1 부터 DAG 실행 스케줄을 시작할 날짜/시간
end_date=dt.datetime(2023.12.31), # 2023.12.31 까지 DAG가 실행된다.
# ...생략...
)
'데이터 엔지니어링 > AirFlow' 카테고리의 다른 글
[Airflow] 기반의 데이터 파이프라인(7) - 태스크 간 데이터 공유 (0) | 2023.10.20 |
---|---|
[Airflow] 기반의 데이터 파이프라인(6) - 태스크 간 의존성 및 브랜치 (1) | 2023.10.19 |
[Airflow] 기반의 데이터 파이프라인(5) - 백필(BackFilling) (1) | 2023.10.14 |
[Airflow] 기반의 데이터 파이프라인(4) - Airflow의 실행 날짜 이해 (0) | 2023.10.13 |
[Airflow] 기반의 데이터 파이프라인(2) - Airflow 설치 with Docker (0) | 2023.10.12 |
[Airflow] 기반의 데이터 파이프라인(1) (0) | 2023.10.11 |