Airflow에서 time scheduling 개념

2021-09-22

.

Data_Engineering_TIL(20210922)

[참고자료]

“버킷플레이스 Airflow 도입기” 블로그글을 공부한 내용입니다.

URL : https://www.bucketplace.co.kr/post/2021-04-13-%EB%B2%84%ED%82%B7%ED%94%8C%EB%A0%88%EC%9D%B4%EC%8A%A4-airflow-%EB%8F%84%EC%9E%85%EA%B8%B0/

[학습내용]

  • Airflow는 기본적으로 UTC 시간 만을 사용함

  • Airflow에서 start_date과 schedule_interval을 이해하고 있어야 원하는 시간으로 Time schduling을 적용할 수 있음

  • Airflow DAG 코드 예시 및 설명

import pendulum
from airflow import DAG
from datetime import datetime, timedelta

# 한국 시간 timezone 설정
kst = pendulum.timezone("Asia/Seoul")

# 한국 시간 2021년 1월 1일 시작, 오전 8시마다 실행되는 DAG 설정
dag = DAG(
    dag_id="test_dag",
    default_args=default_args,
    start_date=datetime(2021, 1, 1, tzinfo=kst),
    schedule_interval="0 8 * * *",
)

Airflow time scheduling은 start_date를 기준으로 schedule_interval을 더해가면서 DAG를 scheduling 하는 원리임. 따라서 start_date만 잘 표현해주면 한국시간 기준으로 schedule_interval을 작성할수 있음

이렇게 작성된 코드만 보면 2021년 1월 1일날 오전 8시에 처음 실행된다고 생각할수 있는데 실제로는 1월 2일날 오전 8시에 처음 실행된다는 원리를 이해해야 한다.

  • Airflow의 execution_date

Airflow에서 start_date는 실행 시작 날짜가 아니라 스케줄이 시작 되는 날짜다. 위와 같은 경우, 1월 1일부터 하루에 한번씩 8시에 스케줄이 등록되고, 하루 뒤인 1월2일부터 execution_date가 1월 1일인 DAG가 실행된다는 의미다. 이 execution_date는 나중에 해당 DAG를 다시 실행해도 그대로 1월 1일로 유지되는 이 DAG 고유 실행 Id 같은 값이다.

11

  • Backfill과 Catchup

과거에 start_date를 설정하면 Airflow는 과거의 Task를 차례대로 실행하는 Backfill을 실행한다. 가끔 예를들어서 “과거 언제부터 데이터를 쭈욱 빌드해주세요” 라는 요청을 받으면 과거 start_date를 잘 설정하기만 하면 빌드는 자동으로 과거부터 실행되어 편리하게 데이터를 빌드할 수 있습니다. 하지만 일반적인 경우에는 이런 동작을 원하지 않는 경우가 많다. 이럴때는 DAG 를 선언할때 Catchup 설정을 아래와 같이 False로 해주면 Backfill을 실행하지 않는다.

dag = DAG(
    dag_id="test_dag",
    default_args=default_args,
    start_date=datetime(2021, 1, 1, tzinfo=kst),
    schedule_interval="0 8 * * *",
    catchUp=False,
)