web-dev-qa-db-ja.com

AirflowのBranchPythonOperatorはどのように機能しますか?

AirflowのBranchPythonOperatorの動作を理解するのに苦労しています。私はそれが主に分岐に使用されることを知っていますが、タスクに渡すものと、上流のタスクから渡す/期待する必要があるものに関するドキュメントによって混乱しています。

ドキュメントの簡単な例を考えてください このページrun_this_firstと呼ばれる上流のタスクと分岐する2つの下流のタスクのソースコードはどのようになりますか? Airflowはbranch_aの代わりにbranch_bを実行することをどのくらい正確に知っていますか?上流のタスクの出力はどこで気づかれ/読まれますか?

15
simplycoding

BranchPythonOperatorは、関数となるpython_callableで作成されます。その関数は、ビジネスロジックに基づいて、接続したすぐ下流のタスクのタスク名を返します。これは、すぐ下流の1〜Nタスクです。ダウンストリームタスク[〜#〜] have [〜#〜]が読み取るものはありませんが、xcomを使用してメタデータを渡すことができます。

def decide_which_path():
    if something is True:
        return "branch_a"
    else:
        return "branch_b"


branch_task = BranchPythonOperator(
    task_id='run_this_first',
    python_callable=decide_which_path,
    trigger_rule="all_done",
    dag=dag)

branch_task.set_downstream(branch_a)
branch_task.set_downstream(branch_b)

trigger_ruleを設定することが重要です。デフォルトではall_successであるため、残りはすべてスキップされます。

19
Nick