Airflow Execution_date

Copes·2021년 11월 24일
0
post-thumbnail

가장 중요한 것

  1. execution_date은 실행 날짜가 아니라 주문 번호(run id)이다.
    시간으로 이해하고 싶다면 예약 시간이 아니라 "예약을 잡으려고 시도한 시간"
  2. '한국 시간'은 잊고 'UTC 기준'으로 사고하자.

예시

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' 이 ... 들어가게 된다.


예시 2

아래처럼 한국 시간 오전 9시 이전 시간으로 지정하면 문제가 발생한다.

schedule_interval="31 15 * * *", #(한국 시간 00:31)

  • 실행된 시간: "2019-06-11T15:31" (한국 시간 2019/06/12 00:31)
  • execution_date: "2019-06-10" (ds = 주문번호)

2019/6/12 에 2019/6/10 일자 로그 작업을 하게 된 것이다.

따라서 한국 시간 기준으로 로그를 수집하고 && 오전 9시 이전에 ETL 해야 하는 경우에는
ds나 yesterday_ds가 아닌 tomorrow_ds를 사용해야 한다.


결론 및 참고 사항)

  1. execution_date은 실행 날짜가 아니라 주문 번호(run id)이다.
    시간으로 이해하고 싶다면 예약 시간이 아니라 "예약을 잡으려고 시도한 시간"
  2. '한국 시간'은 잊고 'UTC 기준'으로 사고하자.
  • execution_date는 해당 일정 기간의 왼쪽 경계(left bound)를 기준
  • now()를 쓰면 위험하다. airflow에서 dynamic value를 쓰지 않도록 권고하고 있다.

Reference)

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

0개의 댓글