この記事では、Databricks アセット バンドルの機能と一般的なバンドルのユース ケースの構成例が記載されます。
次の表に示す完全なバンドルの例は、 バンドルの例の GitHub リポジトリで入手できます。
| バンドル名 | 説明 |
|---|---|
| app_with_database | OLTP Postgres データベースによってサポートされる Databricks アプリを含むバンドル |
| dashboard_nyc_taxi | AI/BI ダッシュボードと、ダッシュボードのスナップショットをキャプチャしてサブスクライバーに電子メールで送信するジョブを含むバンドル |
| database_with_catalog | OLTP データベース インスタンスとデータベース カタログを定義するバンドル |
| databricks_app | Databricks アプリを定義するバンドル |
| 開発クラスタ | 開発 (万能) クラスターを定義して使用するバンドル |
| job_read_secret | シークレット スコープと、そこから読み取るタスクを含むジョブを定義するバンドル |
| job_with_multiple_wheels | 複数のホイール依存関係を持つジョブを定義して使用するバンドル |
| job_with_run_job_tasks | 複数のジョブと実行ジョブタスクを含むバンドル |
| SQLノートブックを活用したジョブ | SQL ノートブック タスクを使用するジョブを含むバンドル |
| pipeline_with_schema | Unity カタログ スキーマとそれを使用するパイプラインを定義するバンドル |
| プライベートホイールパッケージ | ジョブのプライベート ホイール パッケージを使用するバンドル |
| python_wheel_poetry | 詩で whl を構築するバンドル |
| serverless(サーバレス)ジョブ | サーバーレス コンピューティングを使用してジョブを実行するバンドル |
| バンドル間のファイル共有 | バンドル ルート ディレクトリの外部にあるファイルを含むバンドル。 |
| spark_jar_task | Spark JAR タスクを定義して使用するバンドル |
| ジョブからボリュームへの書き込み | Unity カタログ ボリュームにファイルを書き込むバンドル |
バンドル シナリオ
このセクションには、最上位レベルのバンドル マッピングの使用を示す構成例が含まれています。 構成リファレンスを参照してください。
JAR ファイルを Unity カタログにアップロードする バンドル
JAR ファイルやホイール ファイルなどのすべての成果物を Unity Catalog ボリュームにアップロードできるように、Unity Catalog のボリュームを成果物パスとして指定できます。 次のバンドル例では、JAR ファイルをビルドして Unity カタログにアップロードします。
artifact_path マッピングの詳細については、「artifact_path」を参照してください。
artifacts の詳細については、「成果物」を参照してください。
bundle:
name: jar-bundle
workspace:
host: https://myworkspace.cloud.databricks.com
artifact_path: /Volumes/main/default/my_volume
artifacts:
my_java_code:
path: ./sample-java
build: 'javac PrintArgs.java && jar cvfm PrintArgs.jar META-INF/MANIFEST.MF PrintArgs.class'
files:
- source: ./sample-java/PrintArgs.jar
resources:
jobs:
jar_job:
name: 'Spark Jar Job'
tasks:
- task_key: SparkJarTask
new_cluster:
num_workers: 1
spark_version: '14.3.x-scala2.12'
node_type_id: 'i3.xlarge'
spark_jar_task:
main_class_name: PrintArgs
libraries:
- jar: ./sample-java/PrintArgs.jar
ダッシュボードの構成
このセクションには、ダッシュボードの構成例が含まれています。 ダッシュボードの構成の詳細については、 ダッシュボードを参照してください。
ダッシュボード カタログとスキーマのパラメーター化
ダッシュボード リソースの dataset_catalog フィールドと dataset_schema フィールドを使用して Databricks アセット バンドルを使用してデータセットをデプロイするときに、 ダッシュボード内のデータセットの 1 つのカタログとスキーマを定義できます。
注
SQL 内で特定のテーブル参照をパラメーター化するには、 current_catalog() 関数を使用できます。
次のバンドル構成例では、 dev ターゲットと prod ターゲットのカタログ値とスキーマ値を設定する変数を定義します。 バンドルのnyc_taxi_trip_analysis.lvdash.json フォルダーにsrcファイルがあることを前提としています。
bundle:
name: dashboard-bundle
variables:
warehouse_id:
description: Warehouse
default: baf79a9e4ze90f02
catalog_name:
description: 'Catalog name'
default: test_catalog
schema_name:
description: 'Schema name'
default: ${workspace.current_user.short_name}
resources:
dashboards:
nyc_taxi_trip_analysis:
display_name: 'NYC Taxi Trip Analysis'
file_path: src/nyc_taxi_trip_analysis.lvdash.json
warehouse_id: ${var.warehouse_id}
dataset_catalog: ${var.catalog}
dataset_schema: ${var.schema}
targets:
dev:
mode: development
default: true
workspace:
host: https://myworkspace.cloud.databricks.com
variables:
catalog: dev_catalog
schema: ${workspace.current_user.short_name}
prod:
mode: production
workspace:
host: https://myworkspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
variables:
catalog_name: prod_catalog
schema_name: prod_schema
permissions:
- user_name: someone@example.com
level: CAN_MANAGE
ジョブの構成
このセクションには、ジョブの構成例が含まれています。 ジョブ構成の詳細については、 ジョブを参照してください。
サーバーレス コンピューティングを使用するジョブ
Databricks アセット バンドルは、サーバーレス コンピューティング上で実行されるジョブをサポートします。
ワークフローのサーバーレス コンピューティングを使用した Lakeflow ジョブの実行を参照してください。 これを構成するには、ノートブック タスクを使用するジョブの clusters 設定を省略するか、次の例に示すように環境を指定できます。 Python スクリプト、Python ホイール、および dbt タスクの場合、サーバーレス コンピューティングには environment_key が必要です。 詳細については、「environment_key」を参照してください。
# A serverless job (no cluster definition)
resources:
jobs:
serverless_job_no_cluster:
name: serverless_job_no_cluster
email_notifications:
on_failure:
- someone@example.com
tasks:
- task_key: notebook_task
notebook_task:
notebook_path: ../src/notebook.ipynb
# A serverless job (environment spec)
resources:
jobs:
serverless_job_environment:
name: serverless_job_environment
tasks:
- task_key: task
spark_python_task:
python_file: ../src/main.py
# The key that references an environment spec in a job.
# https://docs.databricks.com/api/workspace/jobs/create#tasks-environment_key
environment_key: default
# A list of task execution environment specifications that can be referenced by tasks of this job.
environments:
- environment_key: default
# Full documentation of this spec can be found at:
# https://docs.databricks.com/api/workspace/jobs/create#environments-spec
spec:
environment_version: '2'
dependencies:
- my-library
複数のホイール ファイルを使用するジョブ
次の構成例では、複数の *.whl ファイルを含むジョブを含むバンドルを定義します。
# job.yml
resources:
jobs:
example_job:
name: 'Example with multiple wheels'
tasks:
- task_key: task
spark_python_task:
python_file: ../src/call_wheel.py
libraries:
- whl: ../my_custom_wheel1/dist/*.whl
- whl: ../my_custom_wheel2/dist/*.whl
new_cluster:
node_type_id: i3.xlarge
num_workers: 0
spark_version: 14.3.x-scala2.12
spark_conf:
'spark.databricks.cluster.profile': 'singleNode'
'spark.master': 'local[*, 4]'
custom_tags:
'ResourceClass': 'SingleNode'
# databricks.yml
bundle:
name: job_with_multiple_wheels
include:
- ./resources/job.yml
workspace:
host: https://myworkspace.cloud.databricks.com
artifacts:
my_custom_wheel1:
type: whl
build: poetry build
path: ./my_custom_wheel1
my_custom_wheel2:
type: whl
build: poetry build
path: ./my_custom_wheel2
targets:
dev:
default: true
mode: development
パラメーターを持つジョブ
次の構成例では、パラメーターを使用してジョブを定義します。 ジョブのパラメーター化の詳細については、「ジョブの パラメーター化」を参照してください。
resources:
jobs:
job_with_parameters:
name: job_with_parameters
tasks:
- task_key: task_a
spark_python_task:
python_file: ../src/file.py
parameters:
- '--param1={{ job.parameters.param1 }}'
- '--param2={{ job.parameters.param2 }}'
new_cluster:
node_type_id: i3.xlarge
num_workers: 1
spark_version: 14.3.x-scala2.12
parameters:
- name: param1
default: value1
- name: param2
default: value1
これらのパラメーターは、ジョブ パラメーターをにbundle runすことによって実行時に設定できます。次に例を示します。
databricks bundle run -- --param1=value2 --param2=value2
requirements.txt ファイルを使用するジョブ
次の構成例では、requirements.txt ファイルを使用するジョブを定義します。
resources:
jobs:
job_with_requirements_txt:
name: 'Example job that uses a requirements.txt file'
tasks:
- task_key: task
job_cluster_key: default
spark_python_task:
python_file: ../src/main.py
libraries:
- requirements: /Workspace/${workspace.file_path}/requirements.txt
スケジュールに従ったジョブ
次の例は、スケジュールに従って実行されるジョブの構成を示しています。 ジョブのスケジュールとトリガーについては、「スケジュールとトリガーを使用したジョブの自動化」を参照してください。
この構成では、指定した時刻に毎日実行されるジョブを定義します。
resources:
jobs:
my-notebook-job:
name: my-notebook-job
tasks:
- task_key: my-notebook-task
notebook_task:
notebook_path: ./my-notebook.ipynb
schedule:
quartz_cron_expression: '0 0 8 * * ?' # daily at 8am
timezone_id: UTC
pause_status: UNPAUSED
この構成では、ジョブはジョブが最後に実行されてから 1 週間後に実行されます。
resources:
jobs:
my-notebook-job:
name: my-notebook-job
tasks:
- task_key: my-notebook-task
notebook_task:
notebook_path: ./my-notebook.ipynb
trigger:
pause_status: UNPAUSED
periodic:
interval: 1
unit: WEEKS
パイプラインの構成
このセクションには、パイプラインの構成例が含まれています。 パイプラインの構成情報については、「 パイプライン」を参照してください。
サーバーレス コンピューティングを使用するパイプライン
Databricks アセット バンドルは、サーバーレス コンピューティング上で実行されるパイプラインをサポートします。 これを構成するには設定、パイプライン serverless 設定を true に設定します。 次の構成例では、依存関係がインストールされたサーバーレス コンピューティングで実行されるパイプラインと、1 時間ごとにパイプラインの更新をトリガーするジョブを定義します。
# A pipeline that runs on serverless compute
resources:
pipelines:
my_pipeline:
name: my_pipeline
target: ${bundle.environment}
serverless: true
environment:
dependencies:
- 'dist/*.whl'
catalog: users
libraries:
- notebook:
path: ../src/my_pipeline.ipynb
configuration:
bundle.sourcePath: /Workspace/${workspace.file_path}/src
# This defines a job to refresh a pipeline that is triggered every hour
resources:
jobs:
my_job:
name: my_job
# Run this job once an hour.
trigger:
periodic:
interval: 1
unit: HOURS
email_notifications:
on_failure:
- someone@example.com
tasks:
- task_key: refresh_pipeline
pipeline_task:
pipeline_id: ${resources.pipelines.my_pipeline.id}