
Airflow 운영 중 헷갈리는 시간 개념을 정리하고자 한다.
헷갈릴 때 마다 참고 할 예정~!
execution_date 사용해 동적 시간 참조
- Airflow 는
execution_date라는 Task가 실행되는 특정 간격을 정의하는 추가 매개변수를 제공execution_date는 DAG를 시작하는 시간이 특정 날짜(start_date)가 아니라 스케줄 간격으로 실행되는 시작 시간을 나타내는 timestamp 임- 스케줄 간격의 종료시간은
next_execution_date를 사용

1. Cron 활용
cron 구문 지원| 구문 | 설명 |
|---|---|
| 0 * * * * | 매시간 (정시 실행) |
| 0 0 * * * | 매일 (자정 실행) |
| 0 0 * * 0 | 매주 (일요일 자정에 실행) |
| 0 0 1 * * | 매월 1일 자정 |
| 45 23 * * SAT | 매주 토요일 23시 45 분 |
| 0 0 * * MON, WED, FRI | 매주 월, 화, 금 자정에 실행 |
| 0 0 * * MON-FRI | 매주 월~금 자정에 실행 |
| 0 0,12 * * * | 매일 자정 및 오후 12시 실행 |
-> dag_06_uploads_ums 의 경우 "1 0 * * *" 로 매일 UTC 기준 00:01 에 실행
2. 빈도로 스케줄 간격 지정
cron 식은 특정 빈도로 스케줄을 정의할 수 없음 (3일에 한 번 실행 등)timedelta 인스턴스를 사용해 빈도 기반 스케줄을 정의할 수 있다dag = DAG(
'time_delta',
schedule_interval=dt.timedelta(days=3)
start_date=dt.datetime(2019, 1, 1)
end_date=dt.datetime(2019, 1, 5)
# timedelta(minutes=10) -> 분 설정
# timedelta(hours=2) -> 시간 설정
)
3. 매크로 프리셋
end_date 인수를 설정하면 DAG의 실행 중지 날짜를 지정할 수 있다.| 프리셋 | 상세 |
|---|---|
| @once | 1회만 실행하도록 스케줄 |
| @hourly | 매시간 변경 시 1회 실행 |
| @daily | 매일 자정에 1회 실행 |
| @weekly | 매주 일요일 자정에 1회 실행 |
| @monthly | 매월 1일 자정에 1회 실행 |
| @yearly | 매년 1월 1일 자정에 1회 실행 |
# 2019-01-01 에 시작해 2019-01-05 일에 종료로 정의
# 실제 실행은 2019-01-02 에 최초 실행하여 2019-01-06 에 마지막 실행
# start_date 와 end_date 각각에 정의된 날짜는 schedule_interval 기점으로 정의하기 때문
dag = DAG(
'with_end_date',
schedule_interval="@daily",
start_date=dt.datetime(2019, 1, 1),
end_date=dt.datetime(2019, 1, 5)
)