execution_date
은 실행 날짜가 아니라 주문 번호(run id)이다.start_date': datetime(2019, 6, 6),
schedule_interval="@daily",
이렇게 하면 dag는 실제로 2019/6/7에 최초 실행되며,
execution_date
에는 '2019-06-06' 값이 들어가게 된다.
2019/6/8에 실행되는 run의 execution_date
에는 '2019-06-07' 이,
2019/6/9에 실행되는 run의 execution_date
에는 '2019-06-08' 이 ... 들어가게 된다.
아래처럼 한국 시간 오전 9시 이전 시간으로 지정하면 문제가 발생한다.
schedule_interval="31 15 * * *", #(한국 시간 00:31)
2019/6/12 에 2019/6/10 일자 로그 작업을 하게 된 것이다.
따라서 한국 시간 기준으로 로그를 수집하고 && 오전 9시 이전에 ETL 해야 하는 경우에는
ds나 yesterday_ds가 아닌 tomorrow_ds를 사용해야 한다.
execution_date
은 실행 날짜가 아니라 주문 번호(run id)이다.execution_date
는 해당 일정 기간의 왼쪽 경계(left bound)를 기준now()
를 쓰면 위험하다. airflow에서 dynamic value를 쓰지 않도록 권고하고 있다.1) https://m.blog.naver.com/PostView.nhn?blogId=gyrbsdl18&logNo=221561318823&proxyReferer=https:%2F%2Fwww.google.com%2F
2) https://jaemunbro.medium.com/airflow-execution-date-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-ea25698cf502