Airflow 시간 개념 정리 ⌚

sosimeow·2023년 8월 21일
0

Data Engineering

목록 보기
1/6
post-thumbnail

Airflow 운영 중 헷갈리는 시간 개념을 정리하고자 한다.
헷갈릴 때 마다 참고 할 예정~!

공식 문서 참조


Airflow 시간 개념

execution date

  • 과거에 실행하지 못한 작업을 그 시간대에 맞춰서 실행
  • Airflow 에서 매일 데이터를 수집하도록(@daily) 했다면 그 당시의 스크립트를 따로 매개변수 설정 없이 재실행하기만 하면 그 당시 시간 스크립트를 실행

execution_date 사용해 동적 시간 참조

  • Airflow 는 execution_date 라는 Task가 실행되는 특정 간격을 정의하는 추가 매개변수를 제공
  • execution_date 는 DAG를 시작하는 시간이 특정 날짜(start_date)가 아니라 스케줄 간격으로 실행되는 시작 시간을 나타내는 timestamp 임
  • 스케줄 간격의 종료시간은 next_execution_date 를 사용


schedule_interval

1. Cron 활용

  • Unix 기반 OS 스케줄러 cron 구문 지원
![image](uploads/31c97d37b10b28f821a3669758bd9b8d/image.png) cron 구성요소
구문설명
0 * * * *매시간 (정시 실행)
0 0 * * *매일 (자정 실행)
0 0 * * 0매주 (일요일 자정에 실행)
0 0 1 * *매월 1일 자정
45 23 * * SAT매주 토요일 23시 45 분
0 0 * * MON, WED, FRI매주 월, 화, 금 자정에 실행
0 0 * * MON-FRI매주 월~금 자정에 실행
0 0,12 * * *매일 자정 및 오후 12시 실행

-> dag_06_uploads_ums 의 경우 "1 0 * * *" 로 매일 UTC 기준 00:01 에 실행


2. 빈도로 스케줄 간격 지정

  • cron 식은 특정 빈도로 스케줄을 정의할 수 없음 (3일에 한 번 실행 등)
  • timedelta 인스턴스를 사용해 빈도 기반 스케줄을 정의할 수 있다
dag = DAG(
     'time_delta',
     schedule_interval=dt.timedelta(days=3)
     start_date=dt.datetime(2019, 1, 1)
     end_date=dt.datetime(2019, 1, 5)
# timedelta(minutes=10) -> 분 설정
# timedelta(hours=2) -> 시간 설정
)

3. 매크로 프리셋

  • end_date 인수를 설정하면 DAG의 실행 중지 날짜를 지정할 수 있다.
프리셋상세
@once1회만 실행하도록 스케줄
@hourly매시간 변경 시 1회 실행
@daily매일 자정에 1회 실행
@weekly매주 일요일 자정에 1회 실행
@monthly매월 1일 자정에 1회 실행
@yearly매년 1월 1일 자정에 1회 실행
# 2019-01-01 에 시작해 2019-01-05 일에 종료로 정의
# 실제 실행은 2019-01-02 에 최초 실행하여 2019-01-06 에 마지막 실행
# start_date 와 end_date 각각에 정의된 날짜는 schedule_interval 기점으로 정의하기 때문

dag = DAG(
    'with_end_date',
    schedule_interval="@daily",
    start_date=dt.datetime(2019, 1, 1),
    end_date=dt.datetime(2019, 1, 5)
) 
profile
데이터 엔지니어 ing

0개의 댓글