[英]How to branch multiple paths in Airflow DAG using branch operator?
這就是我想要的,但我不知道如何在 airflow 中實現這一點,因為這兩個任務都在執行。
總結一下:
option_1 -> complete
或option_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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.