![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bG8WxL/btsLZ5IrvP1/7n4rK04VXUsX4cWx06XJi0/img.png)
airflow 에서 logical_date 와 schedule 을 고려하면 월배치를 돌리려면 말일 기준의 logical_date 기준으로 배치가 돌아야 한다. 하지만 다 알고 있는것처럼 월말은 1월은 31일이요, 2월은 28 혹은 29일, 3월은 31일 등등 이런식이라 처리하기가 어렵다.제대로 처리하려면 Airflow 2.4.x 이상버전에서는 Timetables 을 직접 구현하는게 가장 베스트인걸로 보인다.하지만, 여기서는 AirflowSkipException 과 schedule 의 crontab 표현을 이용해 해결하는 방법을 알려주고자 한다. 쉽게 생각해서 crontab 에서 매월 28,29,30,31 에 스케쥴을 활성화 하고,월말을 계산해서 아닌날은 스케쥴을 넘기는 형태로 해결하는 방법이다. 해결방법..
airflow 2.x 로 올라가면서 ui 에서 타임존을 고려한 처리가 좋아지긴했는데, DAG 를 만들때 logical_date 를 이용해 값을 유도할때 우리가 의도한 값이 안나올때가 있다. 우선 airflow 의 환경변수기반으로 구성했다는 가정으로 타임존을 아래와 같이 구성하고export AIRFLOW__CORE__DEFAULT_TIMEZONE="Asia/Seoul"export AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE="Asia/Seoul" DAG 선언할때도 start_date 값에 타임존까지 잘 지정했다면 반은 성공한것이다. 근데 , 2024-01-02 00:00 가 되면 2024-01-01 00:00 의 logical_date 가 바인딩될것으로 기대되는데 이상하게{{ l..
airlfow 에서 한국시간으로 사용하기위해서 은근히 번거로운일이 많다, start_date 에 타임존을 지정하고, 설정에 타임존을 지정하더라도 의도한 값을 뽑아내려면 logical_date 를 타임존에 맞춰 변환후 사용해야 제대로 값을 추출할 수 있는 경우가 많다.근데 이걸 매번 DAG 코드에 넣는건 비효율적이기 때문에, Plugin 에 jinja template 으로 커스텀 필터를 추가해서 사용하는 방법을 제안한다. 커스텀 필터 추가하기참고로 airflow 2.9.x , 2.10.x 버전에서 동작 테스트 했었고, plugins 폴더에 넣어주면 사용가능하다.아래와 같이 커스텀 필터를 추가하면 jinja template 에서 쉽게 변환이 가능하다.from airflow.plugins_manager imp..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bb67NJ/btsLZfELGX7/yDPl8YoCAmGiIAIeUSyUm1/img.png)
월별 지표를 만들기위해 말일에 스케쥴을 어떻게 할지 고민하다가, 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_act..