タスク値を使用してタスク間で情報を渡す
タスク値 は、Databricks Utilities taskValues
サブユーティリティを参照します。これにより、Databricks ジョブ内のタスク間で任意の値を渡すことができます。 「taskValues サブユーティリティ (dbutils.jobs.taskValues)」を参照してください。
1 つのタスクで dbutils.jobs.taskValues.set()
を使用してキーと値のペアを指定し、タスク名とキーを使用して後続のタスクの値を参照できます。
Note
サブユーティリティの dbutils.jobs.taskValues.set()
と dbutils.jobs.taskValues.get()
は、Python ノートブックでのみ使用できます。 パラメーターをサポートするすべてのタスクの動的値参照を使用して、タスク値を参照できます。 「タスク値を参照する」を参照してください。
タスク値を設定する
サブユーティリティ dbutils.jobs.taskValues.set()
を使用して、Python ノートブックでタスク値を設定します。
タスク値キーは文字列である必要があります。 ノートブックで複数のタスク値が定義されている場合、各キーは一意である必要があります。
手動またはプログラムでタスク値をキーに割り当てることができます。 有効な JSON として表現できる値のみが許可されます。 値の JSON 表現のサイズは 48 KiB 以下にする必要があります。
たとえば、次の例では、キー fave_food
の静的文字列を設定します。
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")
次の例では、ノートブック タスク パラメーターを使用して、特定の注文番号のすべてのレコードに対してクエリを実行し、現在の注文の状態とレコードの合計数を返します。
from pyspark.sql.functions import col
order_num = dbutils.widgets.get("order_num")
query = (spark.read.table("orders")
.orderBy(col("updated"), ascending=False)
.select(col("order_status"))
.where(col("order_num") == order_num)
)
dbutils.jobs.taskValues.set(key = "record_count", value = query.count())
dbutils.jobs.taskValues.set(key = "order_status", value = query.take(1)[0][0])
このパターンを使用して値のリストを渡し、それらを使用して、各タスクなどのダウンストリーム ロジックを調整できます。 「 パラメーター化された Azure Databricks ジョブ タスクをループで実行する」を参照してください。
次の例では、製品 ID の個別の値を Python リストに抽出し、タスク値として設定します。
prod_list = list(spark.read.table("products").select("prod_id").distinct().toPandas()["prod_id"])
dbutils.jobs.taskValues.set(key = "prod_list", value = prod_list)
タスク値を参照する
Databricks では、動的値参照パターン {{tasks.<task_name>.values.<value_name>}}
を使用して構成されたタスク パラメーターとしてタスク値を参照することをお勧めします。
たとえば、product_inventory
というタスクのキー prod_list
を使用してタスク値を参照するには、構文 {{tasks.product_inventory.values.prod_list}}
を使用します。
「タスク パラメーターを構成する」と「動的な値のリファレンス」を参照してください。
dbutils.jobs.taskValues.get
を使用します
構文 dbutils.jobs.taskValues.get()
では、アップストリーム タスク名を指定する必要があります。 複数のダウンストリーム タスクでタスク値を使用できるため、この構文はお勧めしません。つまり、タスク名が変更された場合は多数の更新が必要になります。
この構文を使用して、必要に応じて default
値と debugValue
を指定できます。 既定値は、キーが見つからない場合に使用されます。 debugValue
を使用すると、ノートブックをタスクとしてスケジュールする前に、ノートブックで手動でコードを開発し、テストするときに使用する静的な値を設定できます。
次の例では、タスク名 order_lookup
に設定されたキー order_status
の値を取得します。 値 Delivered
は、ノートブックを対話的に実行する場合にのみ返されます。
order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")
Note
Databricks では、既定値の設定は推奨されません。キーの欠如やタスクの名前が正しくないため、トラブルシューティングが難しく、予期されるエラー メッセージを防ぐのが困難な場合があるためです。
タスク値を表示する
各実行のタスク値の戻り値は、[タスク実行の詳細] の [出力] パネルに表示されます。 「タスクの実行履歴を表示する」を参照してください。