簡體   English   中英

如何使用分支運算符在 Airflow DAG 中分支多條路徑?

[英]How to branch multiple paths in Airflow DAG using branch operator?

這就是我想要的,但我不知道如何在 airflow 中實現這一點,因為這兩個任務都在執行。

在此處輸入圖像描述

總結一下:

  • T1 執行
  • T2 執行
  • 基於 T2 的 output 我想要go option_1 -> completeoption_2 -> Do_x, Do_y -> complete

我應該如何構建這個? 我有這個作為我當前的代碼:

(t1 >> t2 >> option_1 >> complete)
(t1 >> t2 >> option_2 >> do_x >> do_y >> complete)

在這種情況下,t2 是一個分支運算符。

我也嘗試了... [option_1, option_2]...的語法,但我需要一個完全獨立的路徑來執行,而不僅僅是一個要切換的任務。

您在代碼中擁有的依賴項對於分支是正確的。 確保BranchPythonOperator根據您需要的任何邏輯在分支開始時返回任務的task_id 有關BranchPythonOperator的更多信息,請點擊此處 最后一個重要注意事項與“完成”任務有關。 由於分支會聚在“完成”任務上,因此請確保將trigger_rule設置為“none_failed”(您也可以使用TriggerRule class 常量),這樣任務就不會被跳過。

快速代碼測試供您參考:

from airflow.models import DAG
from airflow.operators.dummy import DummyOperator
from airflow.operators.python import BranchPythonOperator
from airflow.utils.trigger_rule import TriggerRule

from datetime import datetime


DEFAULT_ARGS = dict(
    start_date=datetime(2021, 5, 5),
    owner="airflow",
    retries=0,
)

DAG_ARGS = dict(
    dag_id="multi_branch",
    schedule_interval=None,
    default_args=DEFAULT_ARGS,
    catchup=False,
)


def random_branch():
    from random import randint

    return "option_1" if randint(1, 2) == 1 else "option_2"


with DAG(**DAG_ARGS) as dag:
    t1 = DummyOperator(task_id="t1")

    t2 = BranchPythonOperator(task_id="t2", python_callable=random_branch)

    option_1 = DummyOperator(task_id="option_1")

    option_2 = DummyOperator(task_id="option_2")

    do_x = DummyOperator(task_id="do_x")

    do_y = DummyOperator(task_id="do_y")

    complete = DummyOperator(task_id="complete", trigger_rule=TriggerRule.NONE_FAILED)

    t1 >> t2 >> option_1 >> complete
    t1 >> t2 >> option_2 >> do_x >> do_y >> complete

帶有 BranchPythonOperator 的 DAG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM