Delta Lake 機能の互換性とプロトコル
この記事では、Delta Lake のプロトコル、テーブル機能、および読み書きにおける Delta Lake クライアントとの互換性の概要を説明します。
Delta Lake テーブルのトランザクションログには、プロトコルのバージョン管理情報が含まれています。DESCRIBE DETAIL を使用してテーブルの詳細を確認するを参照してください。
テーブルプロトコルは、どのように読み取りと書き込みの互換性を指定しますか?
各Delta Lakeテーブルには、テーブルへの読み書きに必要な一連の機能を示すプロトコル仕様があります。プロトコル仕様は、テーブルの読み取りまたは書き込みを行うアプリケーションが、そのテーブルがサポートするすべての機能を処理できるかどうかを判断するために使用されます。アプリケーションが、テーブルのプロトコルでサポートされていると示されている機能の処理方法がわからない場合、そのアプリケーションは、そのテーブルを読み取ったり書き込んだりできません。
Delta Lake に追加されるほとんどの新機能には、テーブルプロトコルのアップグレードが必要です。
以下の表は、Delta Lake プロトコルを説明する際に用いられる主要な用語の概要を示します。
規約 | 説明 |
|---|---|
Delta Lake クライアント | Delta Lake テーブルに読み取りまたは書き込みを行うあらゆるシステム |
プロトコルの読み取り | Delta Lake クライアントがテーブルを読み取るために必要となるサポートを指定します。 |
プロトコルの書き込み | Delta Lake クライアントがテーブルに書き込むために必要なサポートを指定します。 |
| リーダープロトコルの構成要素。有効な値は |
| ライタープロトコルのコンポーネント。有効な値は2から7までの整数です。 |
テーブル特徴量 | プロトコルバージョンに代わるきめ細かな代替品です。テーブルの機能は、オプションで有効にできる Delta Lakeの機能にマップされます。 |
ライター機能 | 書き込みプロトコルに関連付けられたテーブル機能。 |
リーダー機能 | 読み取りプロトコルに関連付けられたテーブル機能。 |
書き込みプロトコルと書き込み機能は、書き込みクライアントとの互換性にのみ影響します。つまり、レガシーワークロードからのテーブルへの読み取り専用アクセスは引き続きサポートされます。読み取りプロトコルおよびリーダー機能は、読み取りと書き込み両方の互換性に影響を与えます。
すべての Delta Lake 機能が互換性があるわけではありません。
一部のテーブル機能は、一度有効にすると削除できません。Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。
プロトコル互換性のテーブル機能
Databricks Runtime 12.2 LTS 以降では、Databricks は テーブル機能 を使用して、機能のサポートとリーダーとライターとの互換性を示します。テーブル機能では、詳細なフラグを使用して、特定のテーブルでサポートされている機能を指定します。テーブル機能は、Delta Lake プロトコルに新機能を導入することで、従来のプロトコルのバージョン管理スキームを置き換えます。
テーブル ライター機能 は、データが書き込まれる方法に影響を与える機能を示します。テーブルライター機能には、minWriterVersion == 7 が必要です。ライター機能として実装された機能は、リーダークライアントをブロックしません。
テーブル読み取り機能は、データの読み込み方法に影響を与える特徴量を示します。すべてのテーブルリーダー機能は、テーブルライター機能でもあります。テーブルリーダー機能には、minReaderVersionが3であり、minWriterVersionが7であることが必要です。クライアントは、読み取りできないテーブルに書き込むことはできません。
テーブル機能を有効にすると、テーブルのプロトコルでサポートされているすべての機能が、それぞれのリストに readerFeatures または writerFeaturesとして表示されます。テーブルからフィーチャを削除する場合、テーブルはこの動作を削除して、可能な限り低いプロトコルに解決する場合があります。可能な限り低いプロトコルを参照してください。
整数ベースのプロトコル バージョンとレガシ互換性
すべてのテーブルには、 minReaderVersion と minWriterVersionで表される整数ベースのプロトコル バージョンが含まれています。テーブル機能を使用して実装される機能は、これらのプロトコル バージョンに基づいて構築されていますが、多くのレガシ リーダーおよびライター クライアントでは、互換性を管理するためにプロトコル バージョンを引き続き使用します。Delta Lake は、最新の Delta クライアントとの互換性を最大限に維持するために、テーブル プロトコルを可能な限り低いバージョンに解決しようとします。可能な限り低いプロトコルを参照してください。
整数ベースのプロトコルバージョニングスキームでは、各バージョン番号には複数の機能がバンドルされており、バージョン番号をまたぐ機能は累積されます。これは、Deltaプロトコルに準拠するには、クライアントは特定のバージョンに存在するすべてのリーダーまたはライター機能(以前にリリースされたすべての機能を含む)のサポートを実装する必要があることを意味します。
Databricks は、サポートされているすべての Databricks Runtime のバージョンで、テーブル機能の非破壊的な部分的なサポートを含みます。OSS Delta クライアントは、特定の機能のサポートをどのように実装するかを選択します。
テーブルプロトコルはいつ変更されますか?
テーブルのプロトコルは、以下の条件で変更されます。
- 新しい機能が有効になると、プロトコルがアップグレードされます。
- テーブル機能が削除された場合、プロトコルはダウングレードされます。
テーブル機能を無効にしても、プロトコルはダウングレード されません 。テーブルプロトコルから完全に削除するには、フィーチャーを削除する必要があります。すべてのテーブル機能を削除できるわけではありません。Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。
すべてのプロトコル変更操作は、すべての並列書き込みと競合します。
ストリーミング読み取りは、テーブルのメタデータを変更するコミットに遭遇すると失敗します。ストリームを継続したい場合は、ストリームを再起動する必要があります。推奨される方法については、「構造化ストリーミングの本番運用に関する考慮事項」を参照してください。
ほとんどのプロトコルバージョンのアップグレードは元に戻せず、プロトコルバージョンをアップグレードすると、既存の Delta Lake テーブルリーダー、ライター、またはその両方が破損する可能性があります。Databricks は、Delta Lake の新機能を利用する場合など、必要な場合にのみ特定のテーブルをアップグレードすることをお勧めします。また、現在および将来のすべての本番運用ツールが、新しいプロトコルバージョンに対応したDelta Lakeテーブルをサポートしていることを確認する必要もあります。
プロトコルのダウングレードは、一部の機能で使用できます。Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。
テーブルプロトコルはいつアップグレードされますか?
テーブルで機能を有効にすると、テーブルプロトコルが自動的にアップグレードされます。一部の機能は、CREATEまたはALTERのテーブルステートメントで使用される構文に基づいて自動的に有効になりますが、その他の機能は、テーブルプロパティを設定することで明示的な有効化が必要です。時には、目的の機能をサポートするために、複数のテーブル機能を明示的に有効にする必要があります。その他の場合では、機能を有効にすると、他のテーブル機能が自動的に有効になる場合があります。必要なテーブル機能と、使用する機能と構文については、Databricksドキュメントを参照してください。
リーダー機能には、読み取りプロトコルと書き込みプロトコル両方のアップグレードが必要です。ライター機能では、書き込みプロトコルのアップグレードのみが必要です。
例として、CHECK制約のサポートはライター機能です。書き込みアプリケーションのみがCHECK制約を認識し、適用する必要があります。
それに対し、カラムマッピングでは、読み取りプロトコルと書き込みプロトコルの両方をアップグレードする必要があります。データがテーブルに異なる方法で保存されているため、リーダーアプリケーションはデータを正しく読み取るために列マッピングを理解する必要があります。
Databricks では、 minReaderVersion テーブルと minWriterVersion テーブルのプロパティを変更しないことをお勧めします。これらのテーブル・プロパティを変更しても、プロトコルのアップグレードは妨げられません。これらの値を低い値に設定しても、テーブルはダウングレードされません。Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。
可能な限り低いプロトコル
デフォルトで、Delta Lake は、テーブルでサポート対象としてマークされているすべての機能を表現するために、可能な限り低いプロトコルを使用しようとします。
この動作は、テーブルプロトコルが低下することにしかならず、つまり、テーブルのminReaderVersionまたはminWriterVersion はより低い値に変更される可能性があります。
テーブルプロトコルでサポートされているフィーチャーのリストからテーブルフィーチャーを削除するには、DROP FEATURE コマンドを実行する必要があります。テーブル機能が自動的に削除されることはありません。
テーブルに存在するすべてのDelta Lake機能が、より低いプロトコルバージョンで完全にサポートされている場合、そのテーブルは、リーダーおよびライターの互換性を示すためにテーブル機能を使用しないプロトコルバージョンに戻る可能性があります。このプロトコルのダウングレードが発生すると、テーブルはテーブルプロトコルからreaderFeatures、またはreaderFeaturesとwriterFeaturesの両方を削除する可能性があります。これにより、Delta Lake の機能が無効になることはなく、テーブル機能がテーブルプロトコルで不要な場合にのみ発生します。
テーブルプロトコルを下げるすべての変更は、リーダーおよびライタークライアントとの互換性を向上させます。これは、リーダーおよびライター・クライアントが上位プロトコル・バージョンをサポートしている場合でも、下位プロトコル・バージョンに従う必要があるためです。
「テーブル機能は Delta Lake の機能の有効化方法を変更しますか?」
Databricks を介して Delta Lake テーブルとのみやり取りする場合、最小限の Databricks Runtime 要件を使用して Delta Lake 機能のサポートを追跡し続けることができます。Databricks は、すべての Databricks Runtime LTS リリースで、テーブルのすべての機能がそのリリースでサポートされている限り、テーブル機能にアップグレードされた Delta Lake テーブルの読み取りをサポートします。
他のシステムからDelta Lakeテーブルを読み書きする場合、テーブル機能が互換性に与える影響を考慮する必要があるかもしれません。システムがアップグレードされたプロトコルバージョンを理解できない可能性があるためです。
テーブル機能は、ライター バージョン 7 とリーダー バージョン 3 の Delta Lake 形式に導入されました。Databricks は、サポートされているすべての Databricks Runtime LTS バージョンにコードをバックポートして、テーブル機能のサポートを追加しましたが、 その Databricks Runtime で既にサポートされている機能のみを対象としています 。 つまり、テーブル機能を使用してジェネレーテッドカラムを有効にし、Databricks Runtime 9.1 LTS でこれらのテーブルを引き続き操作することはできますが、ID 列が有効になっているテーブル (Databricks Runtime 10.4 LTS が必要) は、その Databricks Runtime ではまだサポートされていません。
DatabricksはDelta Lake機能の互換性をどのように管理していますか?
Databricks では、Databricks Runtime リリースで Delta Lake をベースに構築された新しい Delta Lake 機能と最適化のサポートが導入されています。Delta Lake の機能を活用する Databricks の最適化では、互換性のために OSS Delta Lake で使用されるプロトコルが尊重されます。Databricks最適化の多くはテーブルでDelta Lake機能を有効にする必要があり、 Lakeflow Spark宣言型パイプラインなどの一部のDatabricks製品は多くのテーブル機能に依存します。
- 下位のDatabricks Runtimeバージョンで書き込まれたすべてのテーブルは、上位のDatabricks Runtimeバージョンで完全な読み書きをサポートしています。
- より新しいDatabricks Runtimeバージョンで書き込まれたテーブルは、より古いDatabricks Runtimeバージョンではサポートされていないテーブル機能を使用する場合があります。
- 一部の機能では、有効になっているテーブル機能に関連するすべての最適化が完全に適用されることなく、低いDatabricks Runtimeバージョンからの書き込みが許可される場合があります。
Databricks Runtime の下位バージョンにバックポートされたサポートを持つテーブル機能を使用する場合、特定の Databricks Runtime バージョンで実行される一部の操作は、対応する OSS Delta バージョンでは実行されない場合があります。開発サイクルまたはデータアーキテクチャに OSS Delta Lake が含まれる場合、本番運用テーブルでテーブル機能を有効にする前に、OSS Delta クライアントで常に互換性をテストする必要があります。
Delta Lake 機能および必要な Databricks Runtime バージョン
機能はテーブル単位で有効化されます。次の表に、示されている機能が完全にサポートされている最低Databricks Runtimeバージョンを示します。完全なサポートとは、読み書き両方で利用可能なすべての機能がサポートされることを意味します。
機能 | Databricks Runtimeのバージョン以降が必要です | ドキュメント |
|---|---|---|
| サポートされているすべての Databricks Runtime バージョン | |
チェンジデータフィード | サポートされているすべての Databricks Runtime バージョン | |
ジェネレーテッドカラム | サポートされているすべての Databricks Runtime バージョン | |
列マッピング | サポートされているすべての Databricks Runtime バージョン | |
ID列 | サポートされているすべての Databricks Runtime バージョン | |
テーブルの機能 | Databricks Runtime 12.2 LTS | |
削除ベクトル | Databricks Runtime 12.2 LTS | |
TimestampNTZ | Databricks Runtime 13.3 LTS | |
UniForm | Databricks Runtime 13.3 LTS | |
リキッドクラスタリング | Databricks Runtime 13.3 LTS | |
行トラッキング | Databricks Runtime 14.3 LTS | |
型の拡張 | Databricks Runtime 15.4 LTS | |
バリアント | Databricks Runtime 15.4 LTS | |
照合 | Databricks Runtime 16.1 | |
保護されたチェックポイント | Databricks Runtime 16.3 | |
カタログコミット | Databricks Runtime 16.4 LTS |
Databricks Runtime リリースノートのバージョンと互換性を参照してください。
Lakeflow Spark宣言型パイプラインとDatabricks SQL新機能をサポートするために定期リリースでランタイム環境を自動的にアップグレードします。 Lakeflow Spark宣言型パイプライン リリース ノート、リリース アップグレード プロセス、およびDatabricks SQLリリース ノートを参照してください。
プロトコルバージョンごとの機能
Delta LakeおよびApache Icebergテーブル機能のプロトコルバージョンの要件は、以下の表に記載されています。特徴量タイプは、ある特徴量が書き込みのみに適用されるか、または読み取りと書き込みの両方に適用されるかを示しています。
Delta Lake は、個別の minReaderVersion と minWriterVersion の値を使用してプロトコル機能を指定します。オープンソースのDelta Lakeプロトコルはテーブル機能に標準化されましたが、一部のクライアントは依然として従来のプロトコルバージョン管理を使用しています。一部のクライアントはすべての機能をサポートしない場合があります。そのため、本番運用テーブルで新しい機能を有効にする前に、クライアントのドキュメントを参照し、互換性をテストしてください。
Apache Iceberg は、個別のリーダーバージョンとライターバージョンではなく、単一の format-version を使用します。Iceberg フォーマットのバージョンは、どの機能が利用可能かを示しますが、その使用を義務付けるものではありません。機能はオプトインですが、フォーマットバージョン3では行追跡が必須です。Iceberg列に「N/A」と表示される機能は、Icebergに直接相当するものがないDelta固有の機能です。
Databricks Runtime の互換性のみを検討されている場合は、「Databricks が Delta Lake 機能の互換性を管理する方法」を参照してください。
機能 | Delta | Delta | Iceberg | 特徴量タイプ |
|---|---|---|---|---|
2 | 1 | 1 | ライター | |
3 | 1 | N/A | ライター | |
4 | 1 | N/A | ライター | |
4 | 1 | N/A | ライター | |
5 | 2 | N/A | リーダーとライター | |
6 | 1 | N/A | ライター | |
7 | 1 | 3 | ライター | |
7 | 3 | 3 | リーダーとライター | |
7 | 3 | 1 | リーダーとライター | |
7 | 3 | 1 | リーダーとライター (1) | |
7 | 2 | N/A | ライター (2) | |
7 | 3 | N/A | リーダーとライター | |
7 | 3 | 3 | リーダーとライター | |
7 | 3 | 3 | リーダーとライター | |
7 | 3 | N/A | リーダーとライター | |
7 | 1 | N/A | ライター | |
7 | 3 | N/A | リーダーとライター |
(1) :リキッドクラスタリングは隠れたパーティショニングを実装しています。
(2) : 列マッピングを有効にする必要があります。