본문 바로가기
aiflow

airflow 실행 날짜 이해: DAG 실행 시간과 execution_date 비교

by kyeongseo.oh 2024. 8. 9.

airflow에는 스케줄링을 위한 여러 가지의 날짜 개념이 존재하며, 대표적으로 start_date, end_date, execution_date 등이 있다.

 

일반적으로는 이해하는 실행 날짜에 대한 개념은 아래와 같다.

start_date 스케줄링된 job이 처음 실행되는 시간
end_date 마지막 job이 실행되는 시간
execution_date  실제 job이 실행된 시간

 

하지만 airflow에서는 다른 의미로 사용된다. airflow에서의 실행 날짜의 기준은 job이 스케줄링된 시간이다.

따라서 실제 의미는 아래와 같다.

start_date job을 처음 예약하는 시간
end_date 마지막 job이 예약되는 시간
execution_date  job을 처음 예약하는 시간, 데이터 처리의 기준점으로 사용

e.g. 만약 매일 자정에 실행되는 dag가 있고, 이 dag가 1월 2일 자정에 실행되었다면, executetion date는 1월 1일 자정이다. 이는 해당 dag가 1월 1일 데이터를 처리해야함을 의미한다.

 

example

@dag(
    schedule=timedelta(minutes=1),
    start_date=pendulum.datetime(2024, 8, 8, 17, 35, tz=pendulum.timezone("Asia/Seoul")),
    end_date=pendulum.datetime(2024, 8, 8, 17, 45, tz=pendulum.timezone("Asia/Seoul")),
    catchup=False,
    tags=["kyeongseo.oh"],
)

 

만약 위와 같이 dag를 스케줄링한다면 아래와 같이 실행된다. 여기서 주의할 점은 execution_date은 jinja template의 값이고, jinja template 값들은 utc를 기준으로 출력된다는 점이다. jinja template에 대한 자세한 내용은 다음에 소개한다.

 

dag가 예약된 시간 dag가 실제로 실행된 시간 execution_date
2024-08-08 17:35:00 (start_date) 2024-08-09 17:36:00 2024-08-08 08:35:00+00:00
2024-08-09 17:36:00 2024-08-10 17:37:00 2024-08-08 08:36:00+00:00
2024-08-10 17:37:00 2024-08-11 17:38:00 2024-08-08 08:37:00+00:00
2024-08-11 17:38:00 2024-08-12 17:39:00 2024-08-08 08:38:00+00:00
2024-08-12 17:39:00 2024-08-13 17:40:00 2024-08-08 08:39:00+00:00
2024-08-13 17:40:00 2024-08-14 17:41:00 2024-08-08 08:40:00+00:00
2024-08-14 17:41:00 2024-08-15 17:42:00 2024-08-08 08:41:00+00:00
2024-08-15 17:42:00 2024-08-16 17:43:00 2024-08-08 08:42:00+00:00
2024-08-16 17:43:00 2024-08-17 17:44:00 2024-08-08 08:43:00+00:00
2024-08-17 17:44:00 2024-08-18 17:45:00 2024-08-08 08:44:00+00:00
2024-08-18 17:45:00 (end_date) 2024-08-19 17:46:00 2024-08-08 08:45:00+00:00

 

참고로 execution_date는 이름으로 인해 의미를 이해하기가 어려워 대신 data_interval_start를 사용하는 것이 권장된다.

'aiflow' 카테고리의 다른 글

airflow connection과 hook  (0) 2024.08.10
airflow task context: jinja template, get_current_context  (0) 2024.08.10
airflow catchup & backfill  (0) 2024.08.10
airflow 스케줄링 : preset, cron, 빈도 기반  (0) 2024.08.09
airflow dag의 구조  (0) 2024.06.22

댓글