Delta Live Tables とは
Note
Delta Live Tables には Premium プランが必要です。 詳細については、Databricks アカウント チームにお問い合わせください。
Delta Live Tables は、信頼性と保守性に優れた抽出、変換、読み込み (ETL) パイプラインの作成を簡略化するように設計された宣言型フレームワークです。 取り込むデータとその変換方法を指定すると、Delta Live Tables は、オーケストレーション、コンピューティング管理、監視、データ品質の強制、エラー処理など、データ パイプラインの管理の重要な側面を自動化します。
Delta Live Tables は Apache Spark 上に構築されていますが、一連の個別の Apache Spark タスクを使用してデータ パイプラインを定義する代わりに、システムが作成する必要があるストリーミング テーブルと具体化されたビュー、およびそれらのストリーミング テーブルと具体化されたビューの設定と更新に必要なクエリを定義します。
ETL パイプラインの構築と実行に Delta Live Tables を使用することのメリットの詳細については、Delta Live Tables の製品ページを参照してください。
Delta Live Tables の の利点 Apache Spark との比較
Apache Spark は、ETL を含む、汎用性の高いオープンソースの統合分析エンジンです。 Delta Live Tables は Spark 上に構築され、特定の一般的な ETL 処理タスクに対処します。 Delta Live Tables は、要件に次のような処理タスクが含まれている場合に、運用環境へのパスを大幅に高速化できます。
- 一般的なソースからのデータの取り込み。
- データを段階的に変換する。
- 変更データ キャプチャ (CDC) の実行。
ただし、デルタ ライブ テーブルは、一部の種類の手続き型ロジックを実装するには適さない。 たとえば、外部テーブルへの書き込み、外部ファイル ストレージまたはデータベース テーブルに対して動作する条件付きを含めるなどの処理要件は、Delta Live Tables データセットを定義するコード内では実行できません。 Delta Live Tables でサポートされていない処理を実装するために、Databricks では、Apache Spark を使用するか、別のジョブ タスクで処理を実行する Databricks ジョブにパイプラインを含むことをお勧めします。 「ジョブの Delta Live Tables パイプライン タスク」を参照してください。
次の表は、Delta Live テーブルと Apache Spark を比較しています。
能力 | デルタライブテーブル | Apache Spark |
---|---|---|
データ変換 | SQL または Python を使用してデータを変換できます。 | SQL、Python、Scala、または R を使用してデータを変換できます。 |
増分データ処理 | 多くのデータ変換は、増分的に自動的に処理されます。 | 増分処理できるように、新しいデータを決定する必要があります。 |
オーケストレーション | 変換は、適切な順序で自動的に調整されます。 | 異なる変換が正しい順序で実行されていることを確認する必要があります。 |
平行性 | すべての変換は、正しいレベルの並列処理で実行されます。 | 関連のない変換を並列で実行するには、スレッドまたは外部オーケストレーターを使用する必要があります。 |
エラー処理 | エラーは自動的に再試行されます。 | エラーと再試行の処理方法を決定する必要があります。 |
モニタリング | メトリックとイベントは自動的にログに記録されます。 | 実行またはデータ品質に関するメトリックを収集するコードを記述する必要があります。 |
デルタ ライブ テーブルの重要な概念
次の図は、Delta Live Tables パイプラインの重要なコンポーネントと、それぞれの説明を示しています。
ストリーミング テーブル
ストリーミング テーブルは、1 つ以上のストリームが書き込まれる Delta テーブルです。 ストリーミング テーブルは、入力データを 1 回だけ処理し、大量の追加専用データを処理できるため、インジェストに一般的に使用されます。 ストリーミング テーブルは、大量のデータ ストリームの待機時間の短い変換にも役立ちます。
具体化されたビュー
具体化されたビューは、具体化されたビューを定義するクエリに基づいて事前計算されたレコードを含むビューです。 具体化されたビューのレコードは、パイプラインの更新スケジュールまたはトリガーに基づいて、Delta Live Tables によって自動的に最新の状態に保たれます。 具体化されたビューが更新されるたびに、使用可能な最新のデータに対して定義クエリを実行する場合と同じ結果が得られます。 ただし、これは多くの場合、最初から完全な結果を再計算することなく、増分更新を使用して行われます。 具体化されたビューは、変換に一般的に使用されます。
表示
Azure Databricks のすべてのビューでは、クエリが実行されたときにソース データセットから結果を計算します。その際、可能であればキャッシュの最適化を利用します。 Delta Live Tables はビューをカタログに発行しないため、ビューは定義されているパイプラインでのみ参照できます。 ビューは、エンド ユーザーやシステムに公開されるべきではない内容の中間クエリに便利です。 Databricks では、データ品質の制約を適用する目的や、ダウンストリームのクエリを複数駆動するようなデータセットを変換または強化する目的にビューを使用することを推奨しています。
パイプライン
パイプラインは、一緒に更新されるストリーミング テーブルと具体化されたビューのコレクションです。 これらのストリーミング テーブルと具体化されたビューは、Python または SQL ソース ファイルで宣言されています。 パイプラインには、パイプラインの実行時にストリーミング テーブルと具体化されたビューを更新するために使用されるコンピューティングを定義する構成も含まれています。 Terraform テンプレートでクラウド アカウント内のインフラストラクチャを定義する方法と同様に、Delta Live Tables パイプラインでは、データ処理のデータセットと変換が定義されます。
Delta Live Tables データセットでデータを処理する方法
次の表では、具体化されたビュー、ストリーミング テーブル、ビューがデータを処理する方法について説明します。
データセットの型 | 定義されたクエリによってレコードが処理される方法 |
---|---|
ストリーミング テーブル | 1 件のレコードは 1 回だけ処理されます。 この種類では追加専用のソースが想定されています。 |
具体化されたビュー | その時点のデータ状態における正確な結果を返すために、必要なときにレコードが処理されます。 具体化されたビューは、変換、集計、低速クエリや頻繁に使用される計算の事前計算などのデータ処理タスクに使用する必要があります。 |
表示 | ビューへのクエリが実行されるたびにレコードが処理されます。 ビューは、パブリック データセットに発行すべきでない中間変換やデータ品質チェックのために使用します。 |
Delta Live Tables 内で最初のデータセットを宣言する
Delta Live Tables では、Python と SQL の新しい構文を使用します。 パイプライン構文の基本については、「python を使用したパイプライン コードの開発と SQL を使用したパイプライン コードの開発を参照してください。
Note
Delta Live Tables では、データセット定義と更新処理は分離されています。また、Delta Live Tables ノートブックは対話型実行を想定した機能ではありません。
Delta Live Tables パイプラインを構成する方法
Delta Live Tables パイプラインの設定は、次の 2 つの大きなカテゴリに分類されます。
- Delta Live Tables 構文を使用してデータセットを宣言するノートブックまたはファイルのコレクション ( ソース コード) を定義する構成。
- パイプライン インフラストラクチャ、依存関係管理、更新プログラムの処理方法、テーブルをワークスペースに保存する方法を制御する構成。
大半の構成内容は必須ではありませんが、一部については注意が必要です (特に、運用パイプラインの構成時)。 コーディネートは次のとおりです。
- データをパイプラインの外部へ提供できるようにするには、Hive メタストアに発行するためのターゲット スキーマを宣言するか、Unity カタログに発行するためのターゲット カタログとターゲット スキーマを宣言する必要があります。
- データ アクセス許可は実行用のクラスターを介して構成されます。 クラスターにデータ ソース用に構成された適切なアクセス許可と、ターゲット ストレージの場所(指定されている場合) があることを確認します。
Python と SQL でパイプライン用のソース コードを記述する方法の詳細については、「Delta Live Tables の SQL 言語リファレンス」および「Delta Live Tables の Python 言語リファレンス」を参照してください。
パイプラインの設定と構成の詳細については、「 Delta Live Tables パイプラインの構成」を参照してください。
最初のパイプラインをデプロイし、更新をトリガーする
Delta Live Tables でデータを処理するには、その前にパイプラインを構成する必要があります。 パイプラインを構成したら、更新をトリガーして、パイプライン内の各データセットの結果を計算できます。 Delta Live Tables パイプラインの使用を開始する方法については、「チュートリアル: 最初の Delta Live Tables パイプラインを実行する」を参照してください。
パイプラインの更新とは
パイプラインにはインフラストラクチャがデプロイされ、ユーザーが更新を開始すると、パイプラインでデータの状態が再計算されます。 更新では、以下の処理が実行されます。
- 正しい構成でクラスターを起動します。
- 定義されているすべてのテーブルとビューを検出し、無効な列名、不足している依存関係、構文エラーなどの分析エラーがないか確認します。
- 使用可能な最新のデータを含むテーブルおよびビューを作成または更新します。
パイプラインは、ユース ケースのコストと待ち時間に関する要件に応じて、継続的に実行させることも、スケジュールに従って実行させることもできます。 「Delta Live Tables パイプラインで更新を実行する」を参照してください。
Delta Live Tables でデータを取り込む
Delta Live Tables は、Azure Databricks で使用できるすべてのデータ ソースをサポートしています。
Databricks では、大半のユース ケースにストリーミング テーブルを使用することを推奨しています。 また、クラウド オブジェクト ストレージに送られてくるファイルの読み込み方法としては自動ローダーを推奨しています。 Delta Live Tables では、ほとんどのメッセージ バスから直接データを取り込むことができます。
クラウド ストレージへのアクセスの構成の詳細については、「クラウド ストレージの構成」を参照してください。
自動ローダーの対応していない形式については、Python または SQL を使用することで、Apache Spark でサポートされているすべての形式をクエリできます。 「Delta Live Tables を使用してデータを読み込む」を参照してください。
データ品質の監視と適用
データセットの内容にデータ品質の制限を適用するには、期待定義を使用します。 制約に違反したレコードの追加を防ぐ従来のデータベースでの CHECK
制約とは異なり、期待値では、データ品質の要件を満たさないデータを処理するときに柔軟性が得られます。 この柔軟性により、煩雑になると予想されるデータと、厳密な品質要件を満たす必要があるデータを処理し保存できます。 パイプラインの期待を使用してデータ品質を管理する方法については、を参照してください。
Delta Live Tables と Delta Lake との関係
Delta Live Tables は、Delta Lake の機能を拡張した製品です。 Delta Live Tables によって作成および管理されるテーブルは、Delta テーブルであるため、Delta Lake における Delta テーブルと同じ保証内容や機能が提供されます。 「Delta Lake とは」を参照してください。
Delta Live Tables には、Delta Lake に設定できる多数のテーブル プロパティのほか、数種類のテーブル プロパティが追加されています。 Delta Live Tables プロパティのリファレンス、および Delta テーブル プロパティのリファレンスを参照してください。
Delta Live Tables によるテーブルの作成と管理の仕組み
Delta Live Tables で作成されるテーブルは Azure Databricks によって自動的に管理され、各テーブルの現在の状態を正しく計算するための更新処理の方法に関する決定や、さまざまなメンテナンス タスクと最適化タスクの実行は自動的に行われます。
ほとんどの操作に関するターゲット テーブルの更新、挿入、削除処理は、すべて Delta Live Tables に任せることをお勧めします。 詳細情報と制限事項については、「削除または更新を手動で実行する手段の確保」を参照してください。
デルタ ライブ テーブルによって実行されるメンテナンス タスク
Delta Live Tables では、テーブルが更新されてから 24 時間以内にメンテナンス タスクが実行されます。 メンテナンスによって古いバージョンのテーブルを削除することで、クエリのパフォーマンスを向上させ、コストを削減することができます。 既定では、システムは完全な OPTIMIZE 操作の後に VACUUMを実行します。 テーブルの OPTIMIZE を無効にするには、テーブルの テーブル プロパティで pipelines.autoOptimize.managed = false
を設定します。 メンテナンス タスクは、メンテナンス タスクがスケジュールされる 24 時間以内にパイプライン更新が実行された場合にのみ実行されます。
制限事項
制限事項の一覧については、「デルタ ライブ テーブルの制限事項 」を参照してください。
Unity カタログでの Delta Live Tables の使用に固有の要件と制限事項の一覧については、「 Unity カタログと Delta Live Tables パイプラインを使用する」を参照してください。
その他のリソース
- Delta Live Tables では、Databricks REST API が完全にサポートされています。 DLT API を参照してください。
- パイプラインとテーブルの設定については、Delta Live Tables プロパティのリファレンスを参照してください。
- Delta Live Tables の SQL 言語リファレンス。
- Delta Live Tables の Python 言語リファレンス。