次の方法で共有


バンドル構成の例

この記事では、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}