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