Databricks アセットバンドルを使用した Delta Live Tables パイプラインの開発

Databricks アセット バンドル (単に バンドルとも呼ばれます) を使用すると、Delta Live Tables パイプラインなどの Databricks リソースをプログラムで検証、デプロイ、実行できます。 「Databricks アセットバンドルとは」を参照してください。

この記事では、パイプラインをプログラムで管理するためのバンドルを作成する方法について説明します。 「Delta Live Tables とは」を参照してください。バンドルは、 Databricks Asset Bundles デフォルト バンドル テンプレート for the Pythonを使用して作成されます。このテンプレートは、ノートブックと、それを実行するパイプラインおよびジョブの定義とペアで構成されます。 次に、デプロイされたパイプラインを Databricks ワークスペースで検証、デプロイ、実行します。

ヒント

Databricks ユーザー インターフェイスまたは API を使用して作成された既存のパイプラインをバンドルに移動する場合は、バンドルの構成ファイルで定義する必要があります。 Databricks では、まず以下のステップを使用してバンドルを作成し、次にバンドルが機能するかどうかを検証することをお勧めします。 その後、追加の定義、ノートブック、およびその他のソースをバンドルに追加できます。 「 既存のパイプライン定義をバンドルに追加する」を参照してください。

要件

  • Databricks CLI バージョン 0.218.0 以降。 インストールされている Databricks CLI のバージョンを確認するには、コマンド databricks -vを実行します。 Databricks CLI をインストールするには、「 Databricks CLI のインストールまたは更新」を参照してください。

  • リモートワークスペースでは、ワークスペースファイルが有効になっている必要があります。 「ワークスペースファイルとは」を参照してください。

(オプション)Python モジュールをインストールしてローカル パイプライン開発をサポートする

Databricks には、IDE でコードを記述するときに構文チェック、オートコンプリート、データ型チェックを提供することで、Delta Live Tables パイプライン コードのローカル開発を支援する Python モジュールが用意されています。

ローカル開発用の Python モジュールは PyPi で利用できます。 モジュールをインストールするには、「 Delta Live Tables の Python スタブ」を参照してください。

プロジェクト テンプレートを使用したバンドルの作成

の Databricksデフォルト バンドル テンプレートを使用してバンドルを作成します。Pythonこのテンプレートは、元のデータセットからデータをフィルター処理する Delta Live Tables パイプラインを定義するノートブックで構成されています。 バンドルテンプレートの詳細については、「アセットバンドルプロジェクトテンプレートDatabricks」を参照してください。

バンドルを最初から作成する場合は、「 バンドルを手動で作成する」を参照してください。

ステップ 1: 認証を設定する

この手順では、開発マシン上の Databricks CLI と Databricks ワークスペースとの間の認証を設定します。 この記事では、 OAuth ユーザー対マシン (U2M) 認証と、認証に DEFAULT という名前の対応する Databricks 構成プロファイルを使用することを前提としています。

注:

U2M認証は、これらのステップをリアルタイムで試すのに適しています。 完全に自動化されたワークフローの場合、Databricks では、代わりに OAuth マシン間 (M2M) 認証を使用することをお勧めします。 「認証」のM2M認証の設定手順を参照してください。

  1. Databricks CLIを使用して、ターゲットワークスペースごとに以下のコマンドを実行し、ローカルでOAuthトークン管理を開始します。

    次のコマンドで、<workspace-url>をDatabricksワークスペースインスタンスのURLに置き換えます(例:https://dbc-a1b2345c-d6e7.cloud.databricks.com)。

    databricks auth login --host <workspace-url>
    
  2. Databricks CLIは、入力した情報をDatabricks構成プロファイルとして保存するよう促します。Enterを押して提案されたプロファイル名を受け入れるか、新規または既存のプロファイルの名前を入力してください。同じ名前の既存のプロファイルは、入力した情報で上書きされます。プロファイルを使用すると、複数のワークスペース間で認証コンテキストをすばやく切り替えることができます。

    既存のプロファイルのリストを取得するには、別のターミナルまたはコマンドプロンプトでDatabricks CLIを使用してコマンドdatabricks auth profilesを実行します。特定のプロファイルの既存の設定を表示するには、コマンドdatabricks auth env --profile <profile-name>を実行します。

  3. Webブラウザで、画面の指示に従ってDatabricksワークスペースにログインします。

  4. 以下のいずれかのコマンドを実行して、プロファイルの現在のOAuthトークンの値とトークンの今後の有効期限のタイムスタンプを表示します。

    • databricks auth token --host <workspace-url>

    • databricks auth token -p <profile-name>

    • databricks auth token --host <workspace-url> -p <profile-name>

    同じ--host値を持つプロファイルが複数ある場合、Databricks CLIが正しいOAuthトークン情報を見つけられるように--host-pオプションを一緒に指定する必要がある場合があります。

ステップ 2: バンドルを作成する

デフォルトの Python バンドルプロジェクトテンプレートを使用してバンドルを初期化します。

  1. ターミナルまたはコマンド プロンプトを使用して、テンプレートの生成バンドルを格納するローカル開発マシン上のディレクトリに切り替えます。

  2. Databricks CLI を使用して、 bundle init コマンドを実行します。

    databricks bundle init
    
  3. Template to useの場合は、Enterを押してデフォルト値の default-python のままにします。

  4. [ Unique name for this project] では、デフォルト値の my_projectをそのまま使用するか、別の値を入力して Enterキーを押します。 これにより、このバンドルのルートディレクトリの名前が決まります。 このルートディレクトリは、現在の作業ディレクトリ内に作成されます。

  5. Include a stub (sample) notebookの場合は、[no] を選択し、Enterキーを押します。これにより、Databricks CLI は、このオプションに関連付けられているサンプル ノートブックには Delta Live Tables コードが含まれていないため、この時点でサンプル ノートブックを追加しないように指示します。

  6. Include a stub (sample) DLT pipelineの場合は、Enterを押してデフォルト値の yes のままにします。これにより、Databricks CLI は、Delta Live Tables コードを含むサンプル ノートブックを追加するように指示されます。

  7. Include a stub (sample) Python packageの場合は、[no] を選択し、Enterキーを押します。これにより、 Databricks CLI は、サンプル Python wheel パッケージファイルや関連するビルド手順をバンドルに追加しないように指示されます。

ステップ 3: バンドルを調べる

テンプレートによって生成されたファイルを表示するには、新しく作成したバンドルのルートディレクトリに切り替えます。 特に関心のあるファイルには、次のものがあります。

  • databricks.yml: このファイルは、バンドルのプログラム名を指定し、パイプライン定義への参照を含め、ターゲット ワークスペースに関する設定を指定します。

  • resources/<project-name>_job.yml and resources/<project-name>_pipeline.yml:これらのファイルは、パイプライン更新タスクを含むジョブとパイプラインの設定を定義します。

  • src/dlt_pipeline.ipynb: このファイルは、実行するとパイプラインを実行するノートブックです。

パイプラインをカスタマイズする場合、パイプライン宣言内のマッピングは、 リファレンスの POST /api/2.0/パイプライン RESTAPIで定義されている create パイプライン操作のリクエストペイロードに対応し、YAML 形式で表されます。

ステップ 4: プロジェクトのバンドル設定ファイルを検証する

このステップでは、バンドル設定が有効かどうかを確認します。

  1. ルート ディレクトリから、Databricks CLI を使用して、次のように bundle validate コマンドを実行します。

    databricks bundle validate
    
  2. バンドル構成のサマリーが返された場合、検証は成功しています。 エラーが返された場合は、エラーを修正し、この手順を繰り返します。

この手順の後にバンドルに変更を加えた場合は、この手順を繰り返して、バンドル構成がまだ有効かどうかを確認する必要があります。

ステップ 5: ローカル プロジェクトをリモート ワークスペースに配置する

この手順では、ローカル ノートブックをリモート Databricks ワークスペースにデプロイし、ワークスペース内に Delta Live Tables パイプラインを作成します。

  1. バンドル ルートから、Databricks CLI を使用して、次のように bundle deploy コマンドを実行します。

    databricks bundle deploy -t dev
    
  2. ローカルノートブックがデプロイされたかどうかを確認する: Databricks ワークスペースのサイドバーで、[ ワークスペース]をクリックします。

  3. src フォルダ> dev > ファイル> <project-name> > users > <your-username> > .bundle をクリックします。ノートブックはこのフォルダにある必要があります。

  4. パイプラインが作成されたかどうかを確認する: Databricks ワークスペースのサイドバーで、 [Delta Live Tables] をクリックします。

  5. Delta Live Tables タブで、[dev <your-username>] <project-name>パイプラインをクリックします。

この手順の後にバンドルに変更を加えた場合は、ステップ 4 から 5 を繰り返して、バンドル構成がまだ有効かどうかを確認してから、プロジェクトを再デプロイする必要があります。

ステップ 6: デプロイしたプロジェクトを実行する

この手順では、コマンド ラインからワークスペース内の Delta Live Tables パイプラインの実行をトリガーします。

  1. ルートディレクトリから、次のように Databricks CLI を使用して bundle run コマンドを実行します。<project-name> をステップ 2 のプロジェクトの名前に置き換えます。

    databricks bundle run -t dev <project-name>_pipeline
    
  2. ターミナルに表示される Update URL の値をコピーし、この値を Web ブラウザーに貼り付けて Databricks ワークスペースを開きます。

  3. Databricks ワークスペースで、パイプラインが正常に完了したら、 taxi_raw ビューと filtered_taxis マテリアライズドビューをクリックして詳細を表示します。

この手順の後にバンドルに変更を加えた場合は、ステップ 4 から 6 を繰り返して、バンドル構成がまだ有効かどうかを確認し、プロジェクトを再デプロイして、再デプロイされたプロジェクトを実行してください。

ステップ 7: クリーンアップ

この手順では、デプロイされたノートブックとパイプラインをワークスペースから削除します。

  1. ルート ディレクトリから、Databricks CLI を使用して、次のように bundle destroy コマンドを実行します。

    databricks bundle destroy -t dev
    
  2. パイプラインの削除要求を確認する: リソースを完全に破棄するように求められたら、「 y 」と入力して Enterキーを押します。

  3. ノートブックの削除要求を確認する: 以前にデプロイしたフォルダーとそのすべてのファイルを完全に破棄するように求められたら、「 y 」と入力して Enterキーを押します。

  4. 開発マシンからバンドルも削除する場合は、ステップ 2 からローカル ディレクトリを削除できます。

既存のパイプライン定義をバンドルに追加する

既存の Delta Live Tables パイプライン定義をベースとして使用して、バンドル構成ファイルで新しいパイプラインを定義できます。 既存のパイプライン定義を取得するには、UI を使用して手動で取得するか、Databricks CLI を使用してプログラムで生成します。

UI を使用して既存のパイプライン定義を取得する

Databricks ワークスペース UI から既存のパイプライン定義の YAML 表現を取得するには、次のようにします。

  1. Databricks ワークスペースのサイドバーで、 [ワークフロー] をクリックします。

  2. [Delta Live Tables] タブで、パイプラインの [Name] リンクをクリックします。

  3. [開発] ボタンの横にあるケバブをクリックし、[設定 YAML の表示] をクリックします。

  4. [パイプライン設定 YAML] ダイアログで、コピー アイコンをクリックして、パイプライン定義の YAML をローカル クリップボードにコピーします。

  5. コピーした YAML をバンドルの databricks.yml ファイルに追加するか、バンドル プロジェクトの resources フォルダーにパイプラインの構成ファイルを作成し、 databricks.yml ファイルから参照します。 「リソース」を参照してください。

  6. バンドルのプロジェクトソースを参照するPythonファイルおよびノートブックをダウンロードして追加します。 通常、バンドル成果物はバンドル内の src ディレクトリにあります。

    ヒント

    ワークスペースから既存のノートブックを 形式にエクスポートするには、Databricks .ipynbノートブック ユーザー インターフェイスから[ファイル] > [IPython ノートブック>エクスポート] Databricksをクリックします。

    ノートブック、Python ファイル、その他のアーティファクトをバンドルに追加したら、パイプライン定義がそれらを適切に参照していることを確認します。 たとえば、バンドルの src/ ディレクトリにある hello.ipynb という名前のノートブックの場合、次のようになります。

    resources:
      pipelines:
        hello-pipeline:
          name: hello-pipeline
          libraries:
            - notebook:
                path: ../src/hello.ipynb
    

Databricks CLI を使用して既存のパイプライン定義を生成する

既存のパイプラインのバンドル設定をプログラムで生成するには:

  1. UI のパイプライン の詳細 サイドパネルから既存のパイプラインの ID を取得するか、 Databricks CLI databricks pipelines list-pipelines コマンドを使用します。

  2. bundle generate pipeline Databricks CLI コマンドを実行し、パイプライン ID を設定します。

    databricks bundle generate pipeline --existing-pipeline-id 6565621249
    

    このコマンドは、バンドルの [ resources ] フォルダにパイプラインのバンドル設定ファイルを作成し、参照されているアーティファクトを src フォルダにダウンロードします。

    ヒント

    最初に bundle deployment bind を使用してバンドル内のリソースをワークスペース内のリソースにバインドすると、ワークスペース内のリソースは、バインド先のバンドルで定義された設定に基づいて更新されます。次の bundle deploy以降。 bundle deployment bindに関する情報については、「Bind bundle リソース」を参照してください。