次の方法で共有


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

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

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

ヒント

バンドルに移動する必要がある、Azure 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 で入手できます。 モジュールをインストールするには、Python stub for Delta Live Tables に関するページを参照してください。

プロジェクト テンプレートを使用してバンドルを作成する

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

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

手順 1: 認証を設定する

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

Note

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

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

    次のコマンド内では、<workspace-url> を Azure Databricks ワークスペース単位の URL (例: https://adb-1234567890123456.7.azuredatabricks.net) に置き換えます。

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

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

  3. Web ブラウザー内で、画面の指示に従って Azure 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 useEnter キーを押して default-python の既定値のままにします。

  4. Unique name for this projectmy_project の既定値のままにするか、別の値を入力して Enter キーを押します。 これにより、このバンドルのルート ディレクトリの名前が決まります。 このルート ディレクトリは、現在の作業ディレクトリ内に作成されます。

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

  6. Include a stub (sample) DLT pipelineEnter キーを押して yes の既定値のままにします。 これにより、Databricks CLI に、Delta Live Tables コードが含まれるサンプル ノートブックを追加するように指示します。

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

手順 3: バンドルを調べる

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

  • databricks.yml: このファイルは、バンドルのプログラム名を指定し、パイプライン定義への参照を格納し、ターゲット ワークスペースに関する設定を指定します。
  • resources/<project-name>_job.yml および resources/<project-name>_pipeline.yml: これらのファイルは、パイプライン更新タスクを含むジョブとパイプラインの設定を定義します。
  • src/dlt_pipeline.ipynb: このファイルは、実行時にパイプラインを実行するノートブックです。

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

手順 4: プロジェクトのバンドル構成ファイルを検証する

この手順では、そのバンドル設定が有効かどうかを確認します。

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

    databricks bundle validate
    
  2. バンドル構成の概要が返されたら、検証が成功したことになります。 エラーが返される場合は、エラーを修正してから、この手順を繰り返します。

この手順の後、お使いのバンドルに何か変更を加える場合はこの手順を繰り返し、お使いのバンドル構成がまだ有効かどうかをチェックする必要があります。

手順 5: ローカル プロジェクトをリモート ワークスペースにデプロイする

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

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

    databricks bundle deploy -t dev
    
  2. そのローカル ノートブックがデプロイされたかどうかをチェックします。お使いの Azure Databricks ワークスペースのサイドバー内で、[ワークスペース] をクリックします。

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

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

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

この手順の後にバンドルに変更を加えた場合は、手順 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 ブラウザーに貼り付けて、お使いの Azure Databricks ワークスペースを開きます。

  3. Azure 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 を使用して既存のパイプライン定義を取得する

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

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

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

  3. [Development] (開発) ボタンの横にあるケバブをクリックし、[View settings YAML] (ビュー設定の YAML) をクリックします。

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

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

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

    ヒント

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

    ノートブック、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 の詳細については、「バンドル リソースをバインドする」を参照してください。