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 |
댓글