結論
Databricks Asset Bundles(DAB)は dbt と普通に併用できます。公式テンプレート dbt-sql が用意されています。
DAB は「Databricks のリソース(ジョブ・パイプライン等)を YAML でコード管理する IaC ツール」です。dbt はその中のタスクの一種として定義できます。
DAB の中で dbt タスクをどう定義するか
# resources/dbt_job.yml
resources:
jobs:
dbt_pipeline_job:
name: dbt_pipeline_job
tasks:
- task_key: dbt_run
dbt_task:
commands:
- dbt deps
- dbt run
warehouse_id: ${var.warehouse_id}
catalog: my_catalog
schema: my_schema
schedule:
quartz_cron_expression: "0 0 3 * * ?"
timezone_id: "Asia/Tokyo"
DAB の databricks.yml でジョブ全体を管理しつつ、タスクタイプとして dbt_task を指定するだけです。
公式テンプレート dbt-sql で即スタート
databricks bundle init 実行時に選べるデフォルトテンプレートに dbt-sql が公式で含まれています。
databricks bundle init dbt-sql
これで以下の構成が自動生成されます。
my_dbt_project/
├── databricks.yml # バンドル定義
├── resources/
│ └── dbt_job.yml # dbt ジョブ定義
├── dbt_project/ # dbt プロジェクト本体
│ ├── dbt_project.yml
│ ├── models/
│ └── profiles.yml
└── ...
出典: Declarative Automation Bundles project templates - Azure Databricks(Microsoft Learn)
既存の DAB 構成との関係
すでに DAB を使って Lakeflow パイプラインやノートブックジョブを管理している場合、既存の構成はそのままで dbt タスクを追加できます。
| 今 DAB で管理しているもの | dbt 導入後 |
|---|---|
| Lakeflow パイプライン定義 | dbt タスクに置き換え or 併存 |
| ジョブスケジュール | そのまま DAB で管理継続 |
| 環境設定(dev/prod) | そのまま DAB で管理継続 |
databricks bundle deploy |
そのまま使える |
DAB の構造は変えず、タスクタイプを Lakeflow → dbt に切り替えるだけです。
dev/prod の環境切り替えも DAB で管理できる
# databricks.yml
bundle:
name: my_dbt_project
targets:
dev:
mode: development
default: true
workspace:
host: https://adb-xxxx.azuredatabricks.net
prod:
mode: production
workspace:
host: https://adb-xxxx.azuredatabricks.net
root_path: /Shared/.bundle/prod/${bundle.name}
run_as:
user_name: service-principal@example.com
# 開発環境にデプロイ
databricks bundle deploy --target dev
# 本番環境にデプロイ
databricks bundle deploy --target prod
出典: Declarative Automation Bundles configuration - Databricks on AWS
dbt タスクの実行先は Serverless SQL Warehouse 推奨
DAB で定義した dbt ジョブの SQL 実行先は SQL Warehouse を指定します。Serverless SQL Warehouse なら起動時間が 2〜6 秒(公式値)と高速で、Photon エンジンが自動で有効になります。
tasks:
- task_key: dbt_run
dbt_task:
commands:
- dbt deps
- dbt run
- dbt test
warehouse_id: ${var.serverless_warehouse_id} # Serverless SQL Warehouse を指定
まとめ
- DAB と dbt は競合しません。DAB が IaC 管理、dbt が変換ロジックを担当します
- 公式テンプレート
dbt-sqlで即スタートできます - 既存の DAB 構成(スケジュール・環境定義・デプロイフロー)はそのまま流用できます
- dbt Cloud は不要です。Databricks Workflows の dbt タスク + DAB で完結します