Data/Airflow

[Airflow] ShortCircuitOperator란?

운호(Noah) 2024. 3. 8. 11:09

ShortCircuitOperator란?

  • 지정된 조건이 참(True)일 때만 다운스트림 작업을 실행하는 Operator입니다.
  • 지정된 조건이 거짓(False)이라면, ShortCircuitOperator는 다운스트림 작업의 실행을 건너뜁니다.

ignore_downstream_trigger_rules 설정

  • ShortCircuitOperator가 거짓(False)된 조건으로 인하여 다운스트림 작업을 건너뛸 때,
  • 다운스트림 작업들의 트리거 규칙을 무시할 것인지 결정하는 설정입니다.
    • ignore_downstream_trigger_rules=True를 적용한 경우 (기본 설정)
      • 조건이 참(True)일 때 : ShortCircuitOperator 뒤에 오는 모든 다운스트림 작업을 실행합니다.
      • 조건이 거짓(False)일 때 : 모든 다운스트림을 건너뜁니다.
    • ignore_downstream_trigger_rules=False를 적용한 경우
      • 조건이 참(True)일 때 : ShortCircuitOperator 뒤에 오는 모든 다운스트림 작업을 실행합니다.
      • 조건이 거짓(False)일 때 : 특정 트리거 룰이 있는 다운스트림을 제외한 모든 다운스트림을 건너뜁니다.

예제 코드

  • ignore_downstream_trigger_rules=True를 적용한 경우

    • short_circuit Task의 조건이 참(True)이면, ShortCircuitOperator 뒤에 오는 모든 다운스트림 작업을 실행합니다.

        @task.short_circuit(ignore_downstream_trigger_rules=True)
        def step_1():
            return True
      
        @task
        def step_2():
            return "step_2"

    • short_circuit Task의 조건이 거짓(False)이면, 모든 다운스트림을 건너뜁니다.

        @task.short_circuit(ignore_downstream_trigger_rules=True)
        def step_1():
            return False
      
        @task
        def step_2():
            return "step_2"

  • ignore_downstream_trigger_rules=False를 적용한 경우

    • short_circuit Task의 조건이 참(True)이면, ShortCircuitOperator 뒤에 오는 모든 다운스트림 작업을 실행합니다.

        @task.short_circuit(ignore_downstream_trigger_rules=False)
        def step_1():
            return True
      
        @task
        def step_2():
            return "step_2"

    • short_circuit Task의 조건이 거짓(False)이면, 특정 트리거 룰이 있는 다운스트림을 제외한 모든 다운스트림을 건너뜁니다.

        @task.short_circuit(ignore_downstream_trigger_rules=False)
        def step_1():
            return False
      
        @task
        def step_2():
            return "step_2"
      
        # NONE_FAILED = 이전 단계들이 모두 성공 또는 스킵일 경우에만 실행
        @task(trigger_rule=TriggerRule.NONE_FAILED) 
        def step_3():
            return "step_3"

참고