dbt コア に接続する

この記事では、Databricks ワークスペース内の Databricks SQLウェアハウスおよび Databricks クラスターと対話するローカル開発コンピューター用の dbt のバージョンである dbt Core について説明します。 代わりにホストされたバージョンの dbt (dbt Cloudと呼ばれます) を使用する場合、または Partner Connect を使用してワークスペース内に SQLウェアハウスをすばやく作成し、dbt Cloudに接続する方法については、「 dbt Cloudへの接続 」を参照してください。

DBT(データ構築ツール)は、データアナリストやデータエンジニアがSELECTステートメントを記述するだけでデータを変換できる開発環境です。 dbt は、これらの SELECT ステートメントをテーブルとビューに変換する処理を行います。 dbt はコードを生の SQL にコンパイルし、Databricks 内の指定されたデータベースでそのコードを実行します。 DBT は、バージョン管理、ドキュメント、モジュール性などのコラボレーション コーディング パターンとベスト プラクティスをサポートします。

dbt はデータを抽出またはロードしません。 DBT は、"読み込み後の変換" アーキテクチャを使用して、変換ステップのみに焦点を当てています。 DBT は、データベースにデータのコピーが既にあることを前提としています。

この記事では、dbt コアの使用に焦点を当てています。 dbt Core を使用すると、ローカル開発マシン上の任意のテキスト エディターまたは IDE で dbt コードを記述し、コマンド ラインから dbt を実行できます。 dbt Core には、dbt コマンドラインインターフェイス (CLI) が含まれています。 dbt CLI は無料で使用でき、 オープンソースです。

dbt Cloudと呼ばれる dbt のホストされたバージョンも利用できます。 dbt Cloudには、ジョブのスケジューリング、CI / CD、ドキュメントの提供、監視とアラート、統合開発環境(IDE)のターンキーサポートが装備されています。 詳細については、「 dbt Cloudへの接続」を参照してください。 dbt Cloud開発者プランでは、無料の開発者シートが 1 つ提供されます。チームおよびエンタープライズの有料プランも利用できます。 詳細については、dbt Web サイトの「 dbt の価格 」を参照してください。

dbt Core と dbt Cloud ではホストされた git リポジトリ (GitHub、GitLab、 Bitbucketなど) を使用できるため、dbt Core を使用して dbt プロジェクトを作成し、dbt Cloud ユーザーが使用できるようにすることができます。 詳細については、 dbt Web サイトの「dbt プロジェクトの作成 」および「 既存のプロジェクトの使用 」を参照してください。

dbt の概要については、次の YouTube ビデオ (26 分) をご覧ください。

要件

dbt Core をインストールする前に、ローカル開発マシンに以下をインストールする必要があります。

  • Python 3.7 以降

  • Python 仮想環境 ( pipenv など) を作成するためのユーティリティ

また、認証には次のいずれかが必要です。

  • (推奨) dbt Core がアカウントの OAuth アプリケーションとして有効になっています。 これはデフォルトで有効になっています。

    (オプション)dbt ログインにカスタム IdP を使用するには、「 Databricks アカウント コンソールで SSO を設定する」を参照してください。

  • A 個人用アクセストークン

    自動化されたツール、システム、スクリプト、アプリで認証する場合のセキュリティのベスト プラクティスとして、Databricks では OAuth トークンを使用することをお勧めします。

    個人用アクセストークン認証を使用する場合、Databricks では、ワークスペース ユーザーではなく、 サービスプリンシパル に属する個人用アクセストークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンを管理する」を参照してください。

ステップ 1: Python 仮想環境 を作成してアクティブ化する

このステップでは、 pipenv を使用して Python 仮想環境を作成します。 Python 仮想環境は、他の環境内のパッケージのバージョンとコードの依存関係に関係なく、パッケージのバージョンとコードの依存関係をその特定の環境に分離するため、使用することをお勧めします。 これにより、予期しないパッケージ バージョンの不一致やコード依存関係の競合を減らすことができます。

  1. ターミナルから空のディレクトリに切り替え、必要に応じて最初にそのディレクトリを作成します。 この手順では、ユーザーのホームディレクトリのルートに dbt_demo という名前の空のディレクトリを作成します。

    mkdir ~/dbt_demo
    cd ~/dbt_demo
    
    mkdir %USERPROFILE%\dbt_demo
    cd %USERPROFILE%\dbt_demo
    
  2. この空のディレクトリに、次の内容の Pipfile という名前のファイルを作成します。 この Pipfilepipenv Python バージョン 3.8.6 を使用するように指示します。 別のバージョンを使用する場合は、 3.8.6 を実際のバージョン番号に置き換えます。

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    dbt-databricks = "*"
    
    [requires]
    python_version = "3.8.6"
    

    上記の行 dbt-databricks = "*" は、 pipenv dbt-databricks パッケージの最新バージョンを使用するように指示しています。 本番運用のシナリオでは、 * を使用するパッケージの特定のバージョンに置き換える必要があります。 Databricks では、バージョン 1.6.0 以降の dbt-databricks パッケージを推奨しています。 Python Package Index (PyPI) Web サイトの dbt-databricks リリース履歴 を参照してください。

  3. このディレクトリに Python 仮想環境を作成するには、 pipenv を実行し、使用する Python バージョンを指定します。 このコマンドは、Python バージョン 3.8.6 を指定します。 別のバージョンを使用する場合は、 3.8.6 を実際のバージョン番号に置き換えます。

    pipenv --python 3.8.6
    
  4. install オプションを指定して pipenv を実行して、dbt Databricks アダプターをインストールします。これにより、PyPI から dbt Databricks アダプター パッケージ dbt-databricksを含むパッケージが Pipfileにインストールされます。dbt Databricks アダプター パッケージは、dbt コアとその他の依存関係を自動的にインストールします。

    重要

    ローカル開発マシンで次のオペレーティングシステムのいずれかを使用している場合は、最初に追加の手順を完了する必要があります:CentOS、MacOS、Ubuntu、Debian、およびWindows。 dbt Labs Web サイトの「 pip を使用して dbt をインストールする 」の「オペレーティング システムに前提条件がありますか」セクションを参照してください。

    pipenv install
    
  5. この仮想環境をアクティブにするには、 pipenv shellを実行します。 アクティベーションを確認するために、端末はプロンプトの前に (dbt_demo) を表示します。 仮想環境は、指定されたバージョンの Python の使用を開始し、この新しい環境内のすべてのパッケージ バージョンとコードの依存関係を分離します。

    pipenv shell
    

    この仮想環境を非アクティブ化するには、 exitを実行します。 (dbt_demo) プロンプトの前から消えます。 この仮想環境を非アクティブ化して python --version または pip list を実行すると、別のバージョンの Python 、使用可能なパッケージまたはパッケージバージョンの別のリスト、またはその両方が表示される場合があります。

  6. --version オプションを指定して python を実行して、仮想環境で予想されるバージョンの Python が実行されていることを確認します。

    python --version
    

    予期しないバージョンの Python が表示された場合は、 pipenv shellを実行して仮想環境をアクティブ化したことを確認してください。

  7. --version オプションを指定して dbt を実行して、仮想環境で予期されるバージョンの dbt と dbt Databricks アダプターが実行されていることを確認します。

    dbt --version
    

    予期しないバージョンの dbt または dbt Databricks アダプターが表示された場合は、 pipenv shellを実行して仮想環境をアクティブ化したことを確認してください。 予期しないバージョンが引き続き表示される場合は、仮想環境をアクティブ化した後、dbt または dbt Databricks アダプターをもう一度インストールしてみてください。

ステップ 2: dbt プロジェクトを作成し、接続設定 を指定してテストする

このステップでは、dbtプロジェクトを作成します。これは、dbt を使用するために必要な関連ディレクトリとファイルのコレクションです。 次に、Databricks クラスター 、 SQL ウェアハウス 、またはその両方への接続設定を含む接続 プロファイル を構成します。セキュリティを強化するために、dbt プロジェクトとプロファイルはデフォルトで別の場所に保存されます。

ヒント

既存のクラスターまたは SQLウェアハウスに接続することも、新しいクラスターを作成することもできます。

  • 既存のクラスターまたは SQLウェアハウスは、複数の dbt プロジェクト、チームでの dbt の使用、または開発ユース ケースに効率的です。

  • 新しいクラスターまたは SQLウェアハウスを使用すると、運用ユース ケース用に 1 つの dbt プロジェクトを分離して実行したり、その dbt プロジェクトが実行されていないときに自動終了を利用してコストを節約したりできます。

Databricks を使用して新しいクラスターまたは SQLウェアハウスを作成し、dbt プロファイルから新しく作成したクラスターまたは既存のクラスターまたは SQLウェアハウスを参照します。

  1. 仮想環境をアクティブにしたまま、プロジェクトの名前を指定して dbt init コマンドを実行します。 この手順では、 my_dbt_demoという名前のプロジェクトを作成します。

    dbt init my_dbt_demo
    
  2. databricks データベースまたは spark データベースを選択するように求められたら、 databricksに対応する番号を入力します。

  3. host 値の入力を求められたら、次の操作を行います。

    • クラスターの場合は、Databricks クラスターの [ 詳細オプション] の [JDBC/ODBC ] タブから [サーバー ホスト名 ] の値を入力します。

    • SQLウェアハウスの場合は、SQLウェアハウスの「 接続の詳細 」タブから 「サーバー・ホスト名 」の値を入力します。

  4. http_path 値の入力を求められたら、次の操作を行います。

  5. 認証タイプを選択するには、対応する番号を入力します use oauth (推奨) または use access token

  6. 認証の種類として [ use access token ] を選択した場合は、Databricks 個人用アクセストークンの値を入力します。

    自動化されたツール、システム、スクリプト、アプリを使用して認証する場合のセキュリティのベスト プラクティスとして、Databricks ではOAuth トークンを使用することをお勧めします。

    個人用アクセストークン認証を使用する場合、Databricks では、ワークスペース ユーザーではなく、 サービスプリンシパル に属する個人用アクセストークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンを管理する」を参照してください。

  7. desired Unity Catalog option 値の入力を求められたら、 use Unity Catalog または not use Unity Catalogに対応する番号を入力します。

  8. Unity Catalogを使用する場合は、プロンプトが表示されたら、 catalog に必要な値を入力します。

  9. プロンプトが表示されたら、 schemathreads に必要な値を入力します。

  10. dbt はエントリを profiles.yml ファイルに書き込みます。 このファイルの場所は、 dbt init コマンドの出力にリストされます。 この場所は、後で dbt debug --config-dir コマンドを実行して一覧表示することもできます。 ここでこのファイルを開いて、その内容を確認および確認できます。

    認証タイプに use oauth を選択した場合は、マシン間 (M2M) またはユーザー間 (U2M) の認証プロファイルを profiles.ymlに追加します。

    以下は、プロファイルaws-oauth-u2mが指定されたprofiles.ymlファイルの例です。targetaws-oauth-u2m を指定すると、U2M プロファイルが dbt で使用されるデフォルトの実行プロファイルとして設定されます。

    my_dbt_demo:
    outputs:
       azure-oauth-u2m:
          catalog: uc_demos
          host: "xxx.cloud.databricks.com"
          http_path: "/sql/1.0/warehouses/9196548d010cf14d"
          schema: databricks_demo
          threads: 1
          type: databricks
          auth_type: oauth
    target: aws-oauth-u2m
    

    Databricks では、シークレットを profiles.yml に直接指定することはお勧めしません。 代わりに、クライアント ID とクライアント シークレットを環境変数として設定します。

  11. my_dbt_demoディレクトリに移動し、dbt debugコマンドを実行して、接続の詳細が正しいことを確認します。

    認証の種類として use oauth を選択した場合は、ID プロバイダーでサインインするように求められます。

    重要

    開始する前に、クラスターまたは SQLウェアハウス が実行されていることを確認します。

    次のような出力が表示されます。

    cd my_dbt_demo
    dbt debug
    
    ...
    Configuration:
      profiles.yml file [OK found and valid]
      dbt_project.yml file [OK found and valid]
    
    Required dependencies:
      - git [OK found]
    
    Connection:
      ...
      Connection test: OK connection ok
    

次のステップ