티스토리 뷰
반응형
월별 지표를 만들기위해 말일에 스케쥴을 어떻게 할지 고민하다가, crontab 표현으로 28~31 활성화 하고, 체크로직을 넣어 실행을 제한하는식으로 접근을 했는데 마지막날이 스케쥴 안되는 문제가 발생했다.
예를 들어, 아래와 같이 스케쥴을 걸면 10/28 , 10/29, 10/30, 10/31 이 스케쥴이 활성화 되면서 실행되길 기대했는데...
31일 스케쥴이 활성화가 안되는 상황이다.
with DAG(
dag_id="sample_dag",
start_date=datetime.datetime(2024, 10, 1, tzinfo=pendulum.timezone("Asia/Seoul")),
schedule_interval="0 0 28-31 * *", # 매월 말일 실행
max_active_runs=1, # 동시에 하나의 DAG만 실행
):
...
해결방법
참고로 airflow 2.10.x 최신버전을 사용중이며, 날짜 바인딩도 지역시간으로 변경하기위해 필터를 커스텀하게 포함해서 사용중인데도 이런현상이 일어났다. 결론부터 말하면 스케쥴에서도 타임존을 선언해서 쓰는 방식을 써야 문제가 없다.
from airflow.timetables.trigger import CronTriggerTimetable
...
with DAG(
dag_id="sample_dag",
start_date=datetime.datetime(2024, 10, 1, tzinfo=pendulum.timezone("Asia/Seoul")),
schedule=CronTriggerTimetable("0 0 28-31 * *", timezone="Asia/Seoul"),
max_active_runs=1, # 동시에 하나의 DAG만 실행
):
원인은?
한국의 경우 UTC 기준 +9시간이 더해지는 구조인데, 스케쥴이 UTC 기준으로 활성화 되고 이를 Asia/Seoul 로 맞출때의 영향으로 보인다. 내부적으로 만들어진 값이 Asia/Seoul 이라고 가정하고 이걸 UTC 랑 변환할때 뭔가 영향을 받아 일어난게 아닌가 싶다.
아래와 같은 시간을 그대로 돌려야 하는게 우리가 생각한건데.
- 2024-10-28T00:00+09
- 2024-10-29T00:00+09
- 2024-10-30T00:00+09
- 2024-10-31T00:00+09
이게 뭔가 꼬여서 밀린게 아닌가 싶다. airflow 를 쓰면 이런 날짜가 항상 헛갈리고 힘든거 같다.
반응형
'데이터처리 > Airflow' 카테고리의 다른 글
Airflow 2.x 의 주요 퍼미션별 권한 6개 상세 설명 : 캡쳐포함 (1) | 2024.08.28 |
---|---|
[AIRFLOW] Variable.get() 의 성능 문제 해결방법 - 환경변수 활용법 (0) | 2023.12.15 |
[오류] Airflow 에서 logical_date 가 잘못 생성되는 문제 - catchup 문제 (0) | 2023.12.14 |
[오류] DAG 의 filepath 값이 잘못 로딩되는 현상 원인과 해결방법 (0) | 2023.12.13 |
[AIRFLOW] BashOperator 에서 시스템 환경변수가 로딩안되는 문제 - env 지정시 (0) | 2023.12.11 |
댓글