メインコンテンツまでスキップ

Databricks ジョブで dbt 変換を使用する

dbt Core プロジェクトを Databricks ジョブのタスクとして実行できます。 dbt Core プロジェクトをジョブ タスクとして実行すると、次の Databricks ジョブ機能を利用できます。

  • dbt タスクを自動化し、dbt タスクを含むワークフローをスケジュールします。
  • dbt 変換を監視し、変換のステータスに関する通知を送信します。
  • dbt プロジェクトを他のタスクと共にワークフローに含めます。 たとえば、ワークフローでは、 Auto Loaderを使用してデータを取り込み、 dbtを使用してデータを変換し、ノートブック タスクを使用してデータを分析できます。
  • ジョブ実行からのアーティファクト (ログ、結果、マニフェスト、構成など) の自動アーカイブ。

dbt Core の詳細については、 dbt のドキュメントを参照してください。

Development and 本番運用 ワークフロー

Databricks では、Databricks SQL ウェアハウスに対して dbt プロジェクトを開発することをお勧めします。 Databricks SQLウェアハウスを使用すると、SQL によって生成されたdbt をテストし、SQL ウェアハウスのクエリ履歴 を使用してdbt によって生成されたクエリをデバッグできます。

本番運用で 変換を実行するには、dbtDatabricks dbtDatabricksジョブで タスクを使用することをお勧めします。デフォルトにより、dbt タスクは、選択したdbtPython DatabricksdbtSQLSQLウェアハウスに対して コンピュートと生成された を使用して プロセスを実行します。

dbt変換は、サーバレス SQLウェアハウスまたはプロ SQLウェアハウス、Databricks コンピュート、またはその他のdbt対応ウェアハウスで実行できます。この記事では、最初の 2 つのオプションについて例を挙げて説明します。

ワークスペースが Unity Catalog に対応しており、 サーバレス ジョブ が有効になっている場合、デフォルトによって、サーバレス コンピュートでジョブが実行されます。

注記

ウェアハウスに対して dbtモデルを開発し、それをSQLDatabricks コンピュートの本番運用で実行すると、パフォーマンスやSQL 言語サポートに微妙な違いが生じることがあります。DatabricksDatabricks Runtime、コンピュートとSQL ウェアハウスに同じ バージョンを使用することをお勧めします。

必要条件

  • dbt Core と dbt-databricks パッケージを使用して開発環境で dbt プロジェクトを作成および実行する方法については、「 dbt Core への接続」を参照してください。

    Databricks では、dbt-spark パッケージではなく、 dbt-databricks パッケージをお勧めします。 dbt-databricks パッケージは、Databricks 用に最適化された dbt-spark のフォークです。

  • Databricks ジョブで dbt プロジェクトを使用するには、 Databricks Git フォルダーの Git 統合を設定する必要があります。 DBFS から dbt プロジェクトを実行することはできません。

  • サーバレスまたはプロ SQLウェアハウスを有効にする必要があります。

  • Databricks SQL のエンタイトルメントが必要です。

最初の dbt ジョブを作成して実行する

次の例では、dbt のコア概念を示すサンプル プロジェクトである jaffle_shop プロジェクトを使用しています。 ジャッフルショッププロジェクトを実行するジョブを作成するには、次の手順を実行します。

  1. Databricks ランディングページに移動し、次のいずれかの操作を行います。

    • ワークフローアイコン サイドバー の「 ワークフロー 「ジョブを作成」ボタン」をクリックし、「 」をクリックします。
    • サイドバーの新しいアイコン新規 ]をクリックし、[ ジョブ ]を選択します。
  2. タスク タブのタスク テキスト ボックスで、 ジョブの名前を追加 をジョブ名に置き換えます。

  3. [タスク名 ] に、タスクの名前を入力します。

  4. 「タイプ 」で、 dbt タスク・タイプを選択します。

    dbt タスクを追加する

  5. ソース ドロップダウンメニューで、 ワークスペース dbtを選択して、Databricks ワークスペースフォルダにある Git プロジェクトを使用するか、リモート リポジトリにあるプロジェクトの プロバイダGit を選択できます。この例では Git リポジトリにある jaffle shop プロジェクトを使用しているため、[ Git provider ] を選択し、[ Edit ] をクリックして、jaffle shop GitHub リポジトリの詳細を入力します。

    dbt プロジェクト リポジトリを構成する

    • [Git リポジトリ URL ] に、jaffle shop プロジェクトの URL を入力します。
    • Gitリファレンス(ブランチ/タグ/コミット)mainと入力します。タグや SHA を使用することもできます。
  6. 確認 をクリックします。

  7. 「dbtコマンド 」テキスト・ボックスで、実行するdbt・コマンド ( depsseedおよび実行 ) を指定します。すべてのコマンドの前に dbtを付ける必要があります。 コマンドは、指定された順序で実行されます。

    dbt コマンドの構成

  8. SQLウェアハウス で、 によって生成されたSQL を実行する ウェアハウスを選択します。SQLdbt SQLウェアハウス のドロップダウンメニューには、サーバレスとプロSQLウェアハウスのみが表示されます。

  9. (オプション)タスク出力のスキーマを指定できます。 デフォルトでは、スキーマ default が使用されます。

  10. (オプション)dbt Core実行するコンピュートの設定を変更する場合は 、「コンピュートdbt CLI 」をクリックします。

  11. (オプション)タスクの dbt-databricks バージョンを指定できます。 たとえば、 dbt タスクを development と 本番運用のために特定のバージョンにピン留めするには、次のようにします。

    • [依存ライブラリ] で、現在の dbt-databricks バージョンの横にある [削除アイコン] をクリックします。
    • [ 追加 ] をクリックします。
    • 「依存ライブラリの追加 」ダイアログで、「 PyPI」 を選択し、「 パッケージ 」テキストボックスに dbt-package のバージョン (dbt-databricks==1.6.0など) を入力します。
    • [ 追加 ] をクリックします。

    dbt-databricks のバージョンを構成する

注記

Databricks では、 dbt タスクを特定のバージョンの dbt-databricks パッケージにピン留めして、開発と本番運用の実行に同じバージョンが使用されるようにすることをお勧めします。 Databricks では、バージョン 1.6.0 以降の dbt-databricks パッケージをお勧めします。

  1. 作成 をクリックします。

  2. ジョブを今すぐ実行するには、[ 「今すぐ実行」ボタン] をクリックします。

dbt ジョブ タスクの結果を表示する

ジョブが完了したら、 ノートブック から SQL クエリを実行するか、Databricks ウェアハウスで クエリ を実行して、結果をテストできます。 たとえば、次のサンプル クエリを参照してください。

SQL
 SHOW tables IN <schema>;
SQL
SELECT * from <schema>.customers LIMIT 10;

<schema> をタスク設定で設定されたスキーマ名に置き換えます。

API の例

また、Jobs API を使用して、dbt タスクを含むジョブを作成および管理することもできます。次の例では、1 つの dbt タスクを持つジョブを作成します。

JSON
{
"name": "jaffle_shop dbt job",
"max_concurrent_runs": 1,
"git_source": {
"git_url": "https://github.com/dbt-labs/jaffle_shop",
"git_provider": "gitHub",
"git_branch": "main"
},
"job_clusters": [
{
"job_cluster_key": "dbt_CLI",
"new_cluster": {
"spark_version": "10.4.x-photon-scala2.12",
"node_type_id": "i3.xlarge",
"num_workers": 0,
"spark_conf": {
"spark.master": "local[*, 4]",
"spark.databricks.cluster.profile": "singleNode"
},
"custom_tags": {
"ResourceClass": "SingleNode"
}
}
}
],
"tasks": [
{
"task_key": "transform",
"job_cluster_key": "dbt_CLI",
"dbt_task": {
"commands": ["dbt deps", "dbt seed", "dbt run"],
"warehouse_id": "1a234b567c8de912"
},
"libraries": [
{
"pypi": {
"package": "dbt-databricks>=1.0.0,<2.0.0"
}
}
]
}
]
}

(上級者向け)カスタムプロファイルで dbt を実行する

dbtSQLウェアハウス (推奨) または汎用コンピュートを使用してprofiles.yml タスクを実行するには、接続先のウェアハウスまたはDatabricks コンピュートを定義するカスタム を使用します。ウェアハウスまたは万能コンピュートを使用してjaffle shopプロジェクトを実行するジョブを作成するには、次の手順を実行します。

注記

タスクの対象として使用できるのは、 SQLウェアハウスまたは万能コンピュートのみです。dbtジョブ コンピュートを dbtの対象にすることはできません。

  1. jaffle_shopリポジトリのフォークを作成します。

  2. フォークしたリポジトリをデスクトップにクローンします。 たとえば、次のようなコマンドを実行できます。

    Bash
    git clone https://github.com/<username>/jaffle_shop.git

    <username> を GitHub ハンドルに置き換えます。

  3. 次の内容で、jaffle_shop ディレクトリに profiles.yml という新しいファイルを作成します。

    YAML
    jaffle_shop:
    target: databricks_job
    outputs:
    databricks_job:
    type: databricks
    method: http
    schema: '<schema>'
    host: '<http-host>'
    http_path: '<http-path>'
    token: "{{ env_var('DBT_ACCESS_TOKEN') }}"
    • <schema> をプロジェクトテーブルのスキーマ名に置き換えてください。
    • ウェアハウスで dbtタスクを実行するには、SQL<http-host> SQLウェアハウスの[Connection Details] タブの[Server Hostname] の値に を置き換えます。dbt万能コンピュートで タスクを実行するには、<http-host> JDBCODBCをDatabricks コンピュートの 「詳細オプション」の「 / タブの サーバーホスト名 」の値に置き換えます。
    • ウェアハウスで dbtタスクを実行するには、SQL<http-path> SQLウェアハウスの[Connection Details] タブの[HTTP Path] の値に を置き換えます。dbt万能コンピュートで タスクを実行するには、<http-path> JDBCODBCをDatabricks コンピュートの 「詳細オプション」の / タブの HTTPパス 値に置き換えます。

    このファイルはソース管理にチェックインするため、ファイル内にアクセストークンなどのシークレットを指定しません。 代わりに、このファイルは dbt テンプレート機能を使用して、ランタイム時に資格情報を動的に挿入します。

注記

生成された認証情報は、実行期間中 (最大 30 日間) 有効で、完了後に自動的に取り消されます。

  1. このファイルを Git にチェックインし、フォークしたリポジトリにプッシュします。 たとえば、次のようなコマンドを実行できます。

    Bash
    git add profiles.yml
    git commit -m "adding profiles.yml for my Databricks job"
    git push
  2. Databricks UI の サイドバーにあるワークフローアイコン [ ワークフロー] をクリックします。

  3. dbt ジョブを選択し、「 タスク」 タブをクリックします。

  4. [ソース ] で [ 編集 ] をクリックし、フォークした jaffle shop GitHub リポジトリの詳細を入力します。

    フォークされたプロジェクト リポジトリを構成する

  5. SQLウェアハウス で、 なし (手動) を選択します。

  6. 「プロファイル・ディレクトリ 」に、profiles.ymlファイルを含むディレクトリへの相対パスを入力します。パス値を空白のままにして、リポジトリ ルートのデフォルトを使用します。

(上級者向け)ワークフローでの dbt Python モデルの使用

注記

Python モデルの dbt サポートはベータ版であり、dbt 1.3 以上が必要です。

dbtPythonDatabricksは、.dbt Python モデルでは、Python エコシステムのツールを使用して、SQL では実装が困難な変換を実装できます。 Databricksジョブを作成して、dbt Pythonモデルで 1 つのタスクを実行することも、複数のタスクを含むワークフローの一部としてdbtタスクを含めることもできます。

ウェアハウスを使用して、 タスクで モデルを実行することはできません。PythondbtSQLdbtPythonでの モデルの使用の詳細については、Databricks ドキュメントの 「特定のデータウェアハウス dbt」を参照してください。

エラーとトラブルシューティング

プロファイル ファイルが存在しません エラー

エラーメッセージ :

dbt looked for a profiles.yml file in /tmp/.../profiles.yml but did not find one.

考えられる原因 :

指定された$PATHに profiles.yml ファイルが見つかりませんでした。 dbt プロジェクトのルートに profiles.yml ファイルが含まれていることを確認します。