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