Delta Live Tables パイプラインの開発とテストに関するヒント、推奨事項、機能

この記事では、Delta Live Tables パイプラインの開発とテストに使用できるパターンについて説明します。 Delta Live Tables では、パイプライン設定を使用して、開発環境、テスト環境、および本番運用環境でパイプラインを分離する構成を指定できます。この記事の推奨事項は、SQL と Python のコード開発に適用されます。

Databricks では、パラメーターを使用して拡張可能な Delta Live Tables コードを記述することをお勧めします。 これは、開発、テスト、および運用環境間で移植可能なコードを記述する場合に特に便利です。 たとえば、既知の問題のあるテスト データにパイプラインをポイントして、コードの回復性をテストできます。 「パラメーターを使用したデータソースの制御」を参照してください。

開発モードを使用してパイプラインの更新を実行する

Delta Live Tables には、パイプラインの更新を開発モードと本番運用モードのどちらで実行するかを制御するUIトグルがあります。 このモードは、次のようなパイプライン更新の処理方法を制御します。

  • 開発モードでは、更新が成功または失敗した後、コンピュート リソースはすぐには終了しません。 同じコンピュート リソースを再利用して、クラスターが開始するのを待たずに複数のパイプライン更新を実行できます。

  • 開発モードでは、タスクの失敗時に自動的に再試行されないため、パイプラインの論理エラーまたは構文エラーをすぐに検出して修正できます。

Databricks では、開発およびテスト中に開発モードを使用することをお勧めします。 ただし、本番運用環境にデプロイする場合は、必ず本番運用モードに切り替えてください。

開発モードと本番モードを参照してください。

テーブルの更新を待たずにパイプラインのソース コードをテストする

開発およびテスト中に、構文エラーや分析エラーなど、パイプラインのソースコードに関する問題をチェックするには、検証 更新を実行します。 Validate 更新では、テーブルに対して実際の更新を実行せずに、パイプライン ソース コードの正確性を検証するだけなので、実際のパイプライン更新を実行する前に、問題をより迅速に特定して修正できます。

すべての開発ライフサイクルフェーズでターゲットスキーマを指定する

Delta Live Tables パイプライン内のすべてのデータセットは、パイプラインの外部からアクセスできない LIVE 仮想スキーマを参照します。 ターゲット・スキーマが指定されている場合、 LIVE 仮想スキーマはターゲット・スキーマを指します。 更新時に各テーブルに書き出された結果を確認するために、ターゲットスキーマを指定する必要があります。

環境に固有のターゲット スキーマを指定する必要があります。 特定のスキーマ内の各テーブルは、1 つのパイプラインでのみ更新できます。

これらの環境を分離するには、開発用、テスト用、および本番運用用の別々のパイプラインを異なるターゲットで作成します。 target schema パラメーターを使用すると、文字列補間やその他のウィジェットまたはパラメーターを使用してデータソースとターゲットを制御するロジックを削除できます。

パイプラインでの Unity Catalogの使用Delta Live Tables および Delta Live Tables従来の での パイプラインの使用Hive metastore を参照してください。

Databricks Git フォルダーを使用して Delta Live Tables パイプラインを管理する

Databricks では、Delta Live Tables パイプラインの開発、テスト、本番運用へのデプロイ中に Git フォルダーを使用することをお勧めします。 Git フォルダーを使用すると、次のことが可能になります。

  • 時間の経過に伴うコードの変化を追跡します。

  • 複数の開発者が行っている変更をマージします。

  • コードレビューなどのソフトウェア開発プラクティス。

Databricks では、パイプラインに関連するすべてのコードに対して 1 つの Git リポジトリを構成することをお勧めします。

各開発者は、開発用に構成された独自の Databricks Git フォルダーを持つ必要があります。 開発中、ユーザーは Databricks Git フォルダーから独自のパイプラインを構成し、開発データセットと分離されたスキーマと場所を使用して新しいロジックをテストします。 開発作業が完了したら、ユーザーは変更をコミットして中央の Git リポジトリのブランチにプッシュし、テストまたは QA ブランチに対してプルリクエストを開きます。

結果のブランチは Databricks Git フォルダーにチェックアウトし、パイプラインはテスト データセットと開発スキーマを使用して構成する必要があります。 ロジックが想定どおりに実行されると仮定すると、変更を本番運用にプッシュするために、pull request または release ブランチを準備する必要があります。

Git フォルダーを使用して環境間でコードを同期できますが、パイプラインの設定は手動で、または Terraform などのツールを使用して最新の状態に保つ必要があります。

このワークフローは、すべての Databricks ジョブで CI/CD に Git フォルダーを使用する場合と似ています。 「Git および Databricks Git フォルダー (Repos) を使用した CI/CD テクニック」を参照してください。

インジェストと変換のステップのソースコードをセグメント化する

Databricks では、データを取り込むクエリを、データをエンリッチして検証する変換ロジックから分離することをお勧めします。 開発用またはテスト用データソースからデータを取り込むためのソース コードを、本番運用 データ取り込み logic とは別のディレクトリに整理すると、さまざまな環境に固有のデータセットを使用してパイプラインをさまざまな環境用に構成できます。 たとえば、テストに小さなデータセットを使用することで、開発を加速できます。 「開発とテスト用のサンプル データセットを作成する」を参照してください。

また、パラメーターを使用して、開発、テスト、および本番運用のデータソースを制御することもできます。 「 Delta Live Tables パイプラインでのパラメーターの使用」を参照してください。

Delta Live Tables パイプラインは、すべてのデータセット関係の管理にLIVE仮想スキーマを使用するため、サンプル・データをロードするインジェスト・ソース・コードを使用して開発およびテスト・パイプラインを構成することにより、本番運用テーブル名を使用してサンプル・データセットをテスト・コードに置き換えることができます。すべての環境で同じ変換ロジックを使用できます。

開発およびテスト用のサンプル データセットを作成する

Databricks では、開発データセットとテスト データセットを作成して、予期されるデータと、形式が正しくない、または破損している可能性のあるレコードを使用してパイプライン ロジックをテストすることをお勧めします。 開発とテストに役立つデータセットを作成するには、次のような複数の方法があります。

  • 運用データセットからデータのサブセットを選択します。

  • PII を含むソースには、匿名化または人工的に生成されたデータを使用します。

  • ダウンストリーム変換ロジックに基づいて、明確に定義された結果を持つテスト データを作成します。

  • データ スキーマのエクスペクテーションを破るレコードを作成することで、潜在的なデータ破損、不正な形式のレコード、およびアップストリーム データの変更を予測します。

たとえば、次のコードを使用してデータセットを定義するノートブックがあるとします。

CREATE OR REFRESH STREAMING TABLE input_data AS SELECT * FROM read_files("/production/data", "json")

次のようなクエリーを使用して、特定のレコードを含むサンプルデータセットを作成できます。

CREATE OR REFRESH MATERIALIZED VIEW input_data AS
SELECT "2021/09/04" AS date, 22.4 as sensor_reading UNION ALL
SELECT "2021/09/05" AS date, 21.5 as sensor_reading

次の例は、パブリッシュされたデータにフィルタを適用して、開発またはテスト用の運用データのサブセットを作成する方法を示しています。

CREATE OR REFRESH MATERIALIZED VIEW input_data AS SELECT * FROM prod.input_data WHERE date > current_date() - INTERVAL 1 DAY

これらの異なるデータセットを使用するには、変換ロジックを実装するノートブックを使用して複数のパイプラインを作成します。 各パイプラインは LIVE.input_data データセットからデータを読み取ることができますが、環境に固有のデータセットを作成するノートブックを含めるように構成されています。