パラメーター化された Databricks ジョブ タスクをループで実行する

この記事では、ジョブ UI でのタスクの追加と構成の詳細など、Databricks ジョブでの For each タスクの使用について説明します。 For each タスクを使用して、タスクをループで実行し、タスクの各反復に異なるパラメーターのセットを渡します。

For each タスクをジョブに追加するには、For each タスクとネストされたタスクの 2 つのタスクを定義する必要があります。入れ子になったタスクは、 For each タスクの各イテレーションに対して実行するタスクであり、標準の Databricks ジョブ タスクの種類の 1 つです。 ネストされたタスクとして別の For each タスクを追加することはできません。

たとえば、 For each タスクを使用して、複数のテーブルに対して共通の変換セットを実行し、テーブル名のリストからタスクの各イテレーションにテーブル名を渡すことができます。

For each タスクで使用できるパラメーターの種類は何ですか?

For eachタスクからパラメーターを渡すには、次のことができます。

For each タスクを追加または編集するときにこれらの異なるパラメーターの種類を使用する方法については、次のセクション「For each タスクをジョブに追加する」を参照してください。

ジョブへのFor eachタスクの追加

For eachタスクは、ジョブを作成するとき、または既存のジョブのタスクを編集するときに追加できます。For eachタスクを設定するには:

  1. [タイプ] ドロップダウン メニューで、[それぞれ] を選択します。

  2. 「タスク名」フィールドにタスクの名前を入力します。

  3. [入力] テキスト ボックスで、反復処理を行う For each タスクの値を定義します。次のいずれかになります。

    • JSON 形式の値の配列。 これは、次のデータ型の配列にすることができます。

      • キーと値のペア

      • 文字列、数値、または Boolean 型

      • 任意の複雑なJSONオブジェクト

    • タスク値参照。先行タスクから渡されたタスク値を参照するには、 {{tasks.<task_name>.values.<task_value_name>}} 構文を使用して [入力 ] テキスト ボックスに値を設定します。 たとえば、For each タスクの前にある generate_countries_list という名前のタスクで、次のタスク値を設定するとします。

      dbutils.jobs.taskValues.set(key = "countries", value = countries_array)

      次に、 For each タスクは、次の構文を使用して [入力 ] テキスト ボックスのタスク値を参照します。

      {{tasks.generate_countries_list.values.countries}}.

    • ジョブ パラメーター。 ジョブ・パラメーターを参照するには、「 入力」 テキスト・ボックスで {{job.parameters.<name>}}という構文を使用します。 たとえば、 {{job.parameters.countries}}.

  4. 必要に応じて、並列で実行できるイテレーションの数を設定するには、タスクの Concurrency 値を入力します。 デフォルト値は 1 です。

  5. オプションでタスクの開始、成功、または失敗の通知を受け取るには、[ + 追加] をクリックします。 ジョブイベントのEメール通知とシステム通知の追加を参照してください。

  6. For eachタスクの設定を完了し、各イテレーションで実行するネストされたタスクを追加するには、[ループするタスクを追加] をクリックします。

  7. ネストされたタスクのタスクタイプと設定オプションを選択します。 ネストされたタスクは標準のタスクタイプであり、同じ設定オプションがあります。 「Databricks タスクの構成と編集」を参照してください。

  8. For eachタスクから渡されたパラメーターを参照するには、[パラメーター] をクリックします。各イテレーションの配列値に値を設定するために{{input}} 参照を使用するか、オブジェクトのリストを反復処理するときに個々のオブジェクト フィールドを参照するために{{input.<key>}}を使用します。

    ネストされたタスクを For each タスクに追加する
  9. タスクを作成」をクリックします。

For eachタスクとネストされたタスクの切り替え

For eachタスクは、ジョブUIにノードとして表示され、ネストされたタスクノードはFor eachノード内に表示されます。For eachタスクとネストされたタスクを切り替えるには、それぞれのノードをクリックします。

ジョブ UI DAG ビューが For each タスクに切り替わります
ジョブ、UI、DAGビュー、ネストされたタスクへの切り替え

ダウンストリーム タスクでFor eachタスクを参照する

For eachタスクは最上位のタスクであり、ダウンストリーム タスクはそれを依存関係として指定できます。ダウンストリーム タスクは、ネストされたタスクに依存したり、参照したりすることはできません。

For eachタスクを使用したジョブの実行と監視

For eachタスクでジョブを実行する方法は、他のジョブを実行するのと同じです。

ジョブ実行の表示と管理も、タスクの反復のテーブルとして表示される For each タスクのタスク実行履歴を除き、他のジョブと同じです。 For each タスクのタスク実行履歴の表示を参照してください。