AirflowのBranchPythonOperatorの動作を理解するのに苦労しています。私はそれが主に分岐に使用されることを知っていますが、タスクに渡すものと、上流のタスクから渡す/期待する必要があるものに関するドキュメントによって混乱しています。
ドキュメントの簡単な例を考えてください このページrun_this_first
と呼ばれる上流のタスクと分岐する2つの下流のタスクのソースコードはどのようになりますか? Airflowはbranch_a
の代わりにbranch_b
を実行することをどのくらい正確に知っていますか?上流のタスクの出力はどこで気づかれ/読まれますか?
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
であるため、残りはすべてスキップされます。