メインコンテンツまでスキップ

DLTとは?

DLT は、 SQL と Pythonでバッチおよびストリーミング データパイプラインを開発および実行するための宣言型フレームワークです。 DLT はパフォーマンスが最適化された Databricks Runtime (DBR) で実行され、DLT フロー API は Apache Spark や構造化ストリーミングと同じ DataFrame API を使用します。DLTの一般的なユースケースには、クラウドストレージ(Amazon S3、Azure ADLS Gen2、Google Cloud Storageなど)やメッセージバス(Apache Kafka、Amazon Kinesis、Google Pub/Sub、Azure EventHubなど)などのソースからの増分データ取り込みが含まれます。 およびApache Pulsar)、ステートレス演算子とステートフル演算子を使用したインクリメンタルバッチおよびストリーミング変換、およびメッセージバスやデータベースなどのトランザクションストア間のリアルタイムストリーム処理。

DLTの利点は何ですか?

DLT の宣言型の性質は、Apache Spark を用いて構築したデータパイプラインやDatabricksジョブを用いたSpark 構造化ストリーミングと比較して、次の利点を提供します。

  • 自動オーケストレーション : DLT パイプラインは、処理ステップ (「フロー」と呼ばれます) を自動的に調整して、正しい実行順序と並列処理の最大レベルを確保し、最適なパフォーマンスを実現します。さらに、DLT パイプラインは、一時的な障害を自動的かつ効率的に再試行します。再試行プロセスは、最も詳細でコスト効率の高い単位である Spark タスクから始まります。タスク レベルの再試行が失敗した場合、DLT はフローの再試行を続行し、必要に応じてパイプライン全体を再試行します。
  • 宣言型処理 : DLT は、手動の Spark コードと構造化ストリーミング コードを数百行または数千行に短縮できる宣言型関数を提供します。たとえば、Apply Changes API は、SCD Type 1 とSCD Type 2 の両方をサポートしているため、チェンジデータキャプチャ (CDC) イベントの処理を簡素化します。これにより、順不同のイベントを処理するための手動コードが不要になり、ストリーミングのセマンティクスやウォーターマークなどの概念を理解する必要もありません。別の例は、マテリアライズドビューフローに対する、Databricksのインクリメンタル処理エンジン Enzymeです。 これを使用するには、バッチセマンティクスを使用して変換ロジックを記述し、Enzyme は可能な限り新しいデータとデータソースの変更のみを処理します。 Enzymeを使用すると、ソースで新しいデータや変更が発生した場合の非効率的な再処理が減り、インクリメンタル処理を処理するための手動コードが不要になります。

主要な概念

次の図は、DLT の最も重要な概念を示しています。

DLT のコア概念が非常に高いレベルで互いにどのように関連しているかを示す図

フロー は、DLT の基本的なデータ処理概念であり、ストリーミングとバッチ セマンティクスの両方をサポートします。フローは、ソースからデータを読み取り、ユーザー定義の処理ロジックを適用して、結果をターゲットに書き込みます。DLT は、 Spark 構造化ストリーミングと同じフロー タイプ (具体的には、 AppendUpdateComplete ストリーミング フロー) の一部を共有します。 詳細については、 構造化ストリーミングの出力モードを参照してください。

DLT には、追加のフロー タイプも用意されています。

  • Apply Change は、順不同の CDC イベントを処理し、SCD Type 1 と SCD Type 2 の両方をサポートする DLT のユニークなストリーミングフローです。
  • マテリアライズドビュー は、DLTのユニークなバッチフローで、可能な限り新しいデータとソースの変更のみを処理します。

ストリーミングテーブル は、Unity Catalogマネージドテーブルの形式であり、DLTのストリーミングターゲットです。ストリーミングテーブルには、1 つ以上のストリーミング フロー ( 追加更新完了変更の適用 ) を書き込むことができます。 Apply Changes は、ストリーミングテーブルでのみ使用できる独自のストリーミング フローです。 ストリーミングフローは、ターゲットストリーミングテーブルとは別に明示的に定義できます。ストリーミング フローをストリーミングテーブル定義の一部として暗黙的に定義することもできます。

マテリアライズドビュー は、Unity Catalog マネージドテーブルの形式であり、バッチ ターゲットでもあります。マテリアライズドビューには、1 つ以上のマテリアライズドビューフローを書き込むことができます。マテリアライズドビューがストリーミングテーブルと異なるのは、常にマテリアライズドビューの定義の一部としてフローを暗黙的に定義する点です。

シンク は DLT のストリーミング ターゲットであり、現在、Delta テーブル、Apache Kafka トピック、Azure EventHubs トピックがサポートされています。シンクには、1 つ以上のストリーミング フロー ( AppendUpdateComplete ) を書き込むことができます。

パイプライン は、DLT の開発と実行の単位です。パイプラインには、1 つ以上のフロー、ストリーミングテーブル、マテリアライズドビュー、およびシンクを含めることができます。 DLTを使用するには、パイプライン ソース コードでフロー、ストリーミングテーブル、マテリアライズドビュー、およびシンクを定義し、パイプラインを実行します。パイプラインの実行中に、定義されたフロー、ストリーミングテーブル、マテリアライズドビュー、シンクの依存関係が分析され、実行順序と並列化の順序が自動的に調整されます。

Databricks SQL の DLT

DLTは、ストリーミングテーブルとマテリアライズドビューを.ETLDatabricks SQL標準 SQL を使用して、 Databricks SQLでストリーミングテーブルとマテリアライズドビューを作成および更新できます。 ストリーミングテーブルとマテリアライズドビュー Databricks SQL Databricks インフラストラクチャ上で実行され、 DLT パイプラインと同じ処理セマンティクスを持ちます。 Databricks SQLでストリーミングテーブルとマテリアライズドビュー を使用すると、フローはストリーミングテーブルとマテリアライズドビュー の定義の一部として暗黙的に定義されます。

詳細情報