[Airflow] depends_on_past (waiting for downstream)

HAHAHELLO·2024년 10월 15일

에어플로우

목록 보기
2/2

기능

Airflow의 depends_on_past 옵션과 "waiting for downstream" 동작은 DAG(Directed Acyclic Graph) 내에서 테스크의 실행 순서를 제어하는 중요한 기능이다.

depends_on_past

depends_on_past 옵션이 활성화되면, 특정 task가 이전 실행에서 성공했을 때만 현재 실행이 가능합니다. 즉, 현재 task가 실행되기 위해서는 이전 날짜의 동일한 task가 성공적으로 완료되어야 한다.
주로 배치 작업에서, task가 전날 또는 이전 주기에서 성공적으로 완료되어야만 새로운 데이터를 처리할 수 있도록 보장하고 싶을 때 사용한다.

waiting for downstream

waiting for downstream 동작은 Airflow에서 상류 task가 하류 task가 완료되기 전까지 재실행되지 않도록 기다리는 것을 의미한다. 이는 DAG 내에서 task 갑의 의존서이 있을 때 사용한다. 이는 DAG 내에서 task 간의 의존성이 있을 때 사용한다.

예시

DAG 구성

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime, timedelta

default_args = {
    'depends_on_past': True,  # True 또는 False로 설정하여 동작을 확인
}

with DAG(
    'example_dag',
    default_args=default_args,
    start_date=datetime(2024, 10, 10),
    schedule_interval=timedelta(days=1)
) as dag:

    task1 = DummyOperator(task_id='task1')
    task2 = DummyOperator(task_id='task2')

    task1 >> task2  

depends_on_past=True (Waiting for Downstream)

depends_on_past=True로 설정되면, task가 이전 실행에서 성공했는지 여부와 함께 하위 task가 정상적으로 완료되었는지 확인하는 동작이 발생한다. 이때, 하위 task가 실패하거나 미완료 상태이면, 상위 task는 재실행되지 않고 하위 task가 성공할 때까지 기다린다.

DAY 1 (2024-10-10)

  • task1 완료
  • task2 완료

DAY 2 (2024-10-11)

  • task1은 DAY 1의 task 1이 성공했기 때문에 실행된다.
  • 만약 DAY 2의 task2가 실패하면, Airflow는 task1을 다음 실행에서 재실행하지 않고 task2가 성공할 때까지 기다린다.

depends_on_past=False (No Waiting for Downstream)

depends_on_past=False로 설정되면, 현재 task는 이전 주기의 실행 상태와 상관없이 매번 실행된다. 즉, 이전에 하위 task가 실패했더라도 상위 task는 계속해서 다음 주기마다 실행된다.

DAY 1 (2024-10-10)

  • task1 완료
  • task2 완료

DAY 2 (2024-10-11)

  • task1은 DAY 1의 상태와 상관없이 실행된다.
  • DAY 2의 task2가 실패하더라도 DAY 3의 task1은 정상적으로 실행된다.
profile
데이터 엔지니어가 되어 봅시다 🌈

0개의 댓글