カーキ色はヒンディー語らしい

技術記事は https://zenn.dev/notrogue

Prefect見てみる 動的なDAG編

not-rogue.hatenablog.comの続き。

 

PrefectやAirflowで言及されている動的なDAGとは

動的なDAG(Dynamic DAG)は、タスクを、DAGの実行時に決まる回数や、引数で繰り返すDAGです。

 例えば、

  • マルチテナントなシステムで、各テナント毎に処理をしたい
  • 似たようなテーブルが複数あって、それぞれに処理を行いたい

ような場合に使いたくなります。

 

Airflowでの動的なDAG

AIrflowで動的なDAGな対応するには、

などの方法があります。

ただし、

  • リトライの単位が大きくなってしまう
  • タスク固有の制御(リトライやプール)が効かない
  • DAGの構造が変わると過去のDAG Runが不確実になる

などの欠点があり、無理ではないがちょっと考えたくなる感じです。

 

Prefect

Prefectでは、

の2つの方法で動的なDAGを、最初からサポートしています。

 

マップの場合、タスクにリスト(Pythonの普通のやつ)を渡す、もしくは返すことで、実行時に繰り返し数が決まるDAGを定義出来ます。

 

シグナルは、タスク中でLOOPという例外をraiseする事で、同じタスクを(ただし違う引数で)繰り返すDAGを定義出来ます。

 

気になること

そのうち調べます。

  •  マップとシグナルの使い分けは?
  • 複数あるタスクが失敗した時の扱いは?
  • DAG 実行履歴の扱いは?過去のタスクインスタンスの繰り返し回数や、引数を確認出来る?