데이터 엔지니어 기술 블로그

[Airflow] 실행 날짜(execution date) 쉽게 이해하기 본문

데이터 엔지니어링

[Airflow] 실행 날짜(execution date) 쉽게 이해하기

jun_yeong_park 2021. 6. 21. 13:08
반응형

개요

에어플로우에서는 execution date 라는 개념이 있다. 과거에 실행하지 못한 작업을 그 시간대에 맞춰서 실행할 때 유용하다. 

하지만 사용하면서도 계속 헷갈리는데 이번에 정리해보려고 한다.

 

Execution Date란?

통계청에서 Parameter로 가져오는 날짜를 지정해야 하는 API가 있다고 생각해본다. 이 API를 사용하여 데이터를 수집하는 스크립트를 만들었다. 크론탭으로 이 스크립트를 매일 아침에 실행하게 하였는데 만약 3일 전(2021-06-14) 통계청 서버의 오류로 데이터를 수집하지 못한 것을 알아챘다면 스크립트의 매개변수 중 날짜를 2021-06-14로 설정한 후 다시 실행시켜야 한다.

Airflow에는 Execution Date라는 개념이 있어서 매일 데이터를 수집하도록(@daily) 했다면 그 당시의 스크립트를 따로 매개변수 설정 없이 재실행하기만 하면 그 당시의 시간으로 스크립트를 실행해준다.

 

헷갈리는 날짜 정리

 

상황별 실행 결과

1번

설정

schedule: 0 3 * * *
실제 실행 날짜: 6월 18일 04시(UTC)
start_date: days_ago(3) -> 2021-06-15T00:00:00+00:00

 

실행

14일 03시(시작 시간보다 이전) / 15일 03시 / 16일 03시 / 17일 03시 / 18일 03시(현재 시간 + 실행 간격보다 이전)

 

 

2번

설정

schedule: 0 3 * * *
실제 실행 날짜: 6월 21일 04시(UTC)
start_date: datetime.datetime(2021, 6, 15, 12) -> 2021-06-15T12:00:00+00:00

 

실행

15일 03시(시작 시간보다 이전) / 16일 03시 / 17일 03시 / 18일 03시 / 19일 03시 / 20일 03시 / 21일 30시(현재 시간 + 실행 간격보다 이전)

 

 

3번

설정

schedule: 0 3 * * *
실제 실행 날짜: 6월 21일 04시(UTC)
start_date: datetime.datetime(2021, 6, 15, 2) -> 2021-06-15T02:00:00+00:00

 

실행

14일 03시(시작 시간보다 이전) / 15일 03시 / 16일 03시 / 17일 03시 / 18일 03시 / 19일 03시 / 20일 03시 / 21일 03시(현재 시간 + 실행 간격보다 이전)

 

4번

설정

schedule: */35 * * * *
실제 실행 날짜: 6월 21일 03시 41분(UTC)

start_date: datetime.datetime(2021, 6, 21, 2) -> 2021-06-21T02:00:00+00:00

 

실행

20일 01시 35분(시작 시간보다 이전) / 21일 02시 00분 / 21일 02시 35분 / 21일 03시 00분 / 21일 03시 35분(현재시간 + 실행 간격보다 이전)

 

 

결론

1. start_date는 execution_date를 기준으로 하는 시작 시간이다.

2. execution_date는 스케줄이 정해진 시간이 되었을 때 보다 이전 시간이 execution_date가 된다.

3. */35로 했을 때 35분 이후에는 00분부터 다시 시작한다.

 

 

 

반응형
Comments