この記事では、Delta Lake プロトコル、テーブル機能、読み取りと書き込みの Delta Lake クライアントとの互換性の概要について説明します。
Delta テーブルのトランザクション ログには、プロトコルのバージョン情報が含まれています。 「describe detail を使用して Delta Lake テーブルの詳細を確認する」を参照してください。
テーブル プロトコルでは、読み取りと書き込みの互換性をどのように指定しますか?
すべての Delta テーブルには、テーブルの読み取りと書き込みに必要な一連の機能を示すプロトコル仕様があります。 プロトコル仕様は、テーブルに対して読み取りまたは書き込みを行うアプリケーションが、テーブルがサポートするすべての機能を処理できるかどうかを判断するために使用されます。 テーブルのプロトコルでサポートされている機能の処理方法がアプリケーションで不明な場合、そのアプリケーションはそのテーブルの読み取りまたは書き込みを行うことができません。
Delta Lake に追加されたほとんどの新機能では、テーブル プロトコルをアップグレードする必要があります。
次の表は、Delta Lake プロトコルについて説明するために使用される主要な用語の概要を示しています。
任期 | 説明 |
---|---|
Delta Lake クライアント | Delta テーブルの読み取りまたは書き込みを行うシステム。 |
読み取りプロトコル | Delta Lake クライアントがテーブルを読み取るために必要なサポートを指定します。 |
書き込みプロトコル | Delta Lake クライアントがテーブルに書き込むのに必要なサポートを指定します。 |
minReaderVersion |
リーダー プロトコルのコンポーネント。 有効な値は、1 、2 、または 3 です。 |
minWriterVersion |
ライター プロトコルのコンポーネント。 有効な値は、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 ランタイム バージョンのテーブル機能に対する非破壊的部分サポートが含まれています。 OSS デルタ クライアントは、特定の機能のサポートを実装する方法を選択します。
テーブル プロトコルはいつ変更されますか?
テーブルのプロトコルは、次の条件で変更されます。
- 新しい機能が有効になっている場合、プロトコルはアップグレードされます。
- テーブル機能が削除されると、プロトコルがダウングレードされます。
テーブル機能を無効にしても、プロトコルのダウングレード は行われません 。 テーブル プロトコルから機能を完全に削除するには、この機能を削除する必要があります。 すべてのテーブル フィーチャを削除できるわけではありません。 Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
すべてのプロトコル変更操作は、すべての同時書き込みと競合します。
ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇すると失敗します。 ストリームを継続したい場合は、再起動する必要があります。 推奨される方法については、「Azure Databricks での構造化ストリーミング アプリケーションの運用に関する考慮事項」を参照してください。
警告
ほとんどのプロトコル バージョンのアップグレードは、元に戻すことができません。プロトコル バージョンをアップグレードすると、既存の Delta Lake テーブル リーダー、ライター、またはその両方が破損する場合があります。 Databricks では、Delta Lake の新機能をオプトインする場合など、必要な場合にのみ特定のテーブルをアップグレードすることをお勧めします。 また、現在および今後のすべての運用ツールによって、新しいプロトコル バージョンの Delta Lake テーブルがサポートされていることを確認する必要があります。
プロトコルのダウングレードは、一部の機能で利用できます。 Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
テーブル プロトコルはいつアップグレードされますか?
テーブルで機能を有効にすると、テーブル プロトコルが自動的にアップグレードされます。 一部の機能は、 CREATE
または ALTER
テーブル ステートメントで使用される構文に基づいて自動的に有効になりますが、他の機能では、テーブルのプロパティを設定して明示的に有効にする必要があります。 必要な機能をサポートするために、複数のテーブル機能を明示的に有効にする必要がある場合があります。 その他の場合、機能を有効にすると、他のテーブル機能が自動的に有効になる場合があります。 必要なテーブル機能を決定するために使用する機能と構文については、Azure Databricks のドキュメントを参照してください。
リーダー機能では、読み取りプロトコルと書き込みプロトコルの両方をアップグレードする必要があります。 ライター機能では、書き込みプロトコルのアップグレードのみが必要です。
たとえば、 CHECK
制約のサポートはライター機能です。書き込みアプリケーションのみが CHECK
制約について知り、それらを適用する必要があります。
これに対し、列マッピングでは、読み取りと書き込みの両方のプロトコルをアップグレードする必要があります。 データはテーブルに格納される方法が異なるため、リーダー アプリケーションは、データを正しく読み取ることができるように、列マッピングを理解する必要があります。
注
Databricks では、minReaderVersion
と minWriterVersion
テーブルのプロパティを変更するを推奨していません。 これらのテーブルのプロパティを変更しても、プロトコルのアップグレードが防止されることはありません。 これらの値を小さい値に設定しても、テーブルがダウングレードされることはありません。
Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
可能な限り低いプロトコル
既定では、Delta Lake は、テーブルでサポートされている機能としてマークされているすべての機能を表すために、可能な限り低いプロトコルを使用しようとします。
この動作により、テーブル プロトコルが 低下すること だけが発生します。つまり、 minReaderVersion
または minWriterVersion
がテーブルの値を小さく変更する可能性があります。
テーブル プロトコルでサポートされている機能の一覧からテーブル機能を削除するには、 DROP FEATURE
コマンドを実行する必要があります。 テーブル フィーチャは自動的に削除されることはありません。
テーブルに存在するすべての Delta Lake 機能が下位のプロトコル バージョンで完全にサポートされている場合、テーブル機能を使用してリーダーとライターの互換性を示さないプロトコル バージョンに戻る可能性があります。 このプロトコルのダウングレードが発生すると、テーブルプロトコルから readerFeatures
または readerFeatures
と writerFeatures
の両方が削除される可能性があります。 これにより、Delta Lake の機能は無効になりません。テーブル プロトコルでテーブル機能が必要ない場合にのみ発生します。
テーブル プロトコルを低下させるすべての変更により、リーダー クライアントとライター クライアントとの互換性が向上します。 これは、リーダー クライアントとライター クライアントが上位のプロトコル バージョンをサポートしている場合でも、下位のプロトコル バージョンを尊重する必要があるためです。
Delta Lake 機能を有効にする方法はテーブル機能によって変わりますか?
Azure Databricks でのみ Delta テーブルを操作する場合は、最小要件の Databricks Runtime を使用して Delta Lake 機能のサポートを引き続き追跡できます。 Azure Databricks では、テーブルで使用されるすべての機能がそのリリースでサポートされている限り、すべての Databricks Runtime LTS リリースのテーブル機能にアップグレードされた Delta テーブルの読み取りがサポートされます。
他のシステムを使用して Delta テーブルの読み取りと書き込みを行う場合は、アップグレードされたプロトコル バージョンをシステムが理解できないリスクがあるため、テーブル機能が互換性にどのように影響するかを必要に応じて考慮します。
重要
テーブル機能は、ライター バージョン 7 およびリーダー バージョン 3 の Delta Lake 形式に導入されています。 Azure Databricks では、テーブル機能のサポートを追加するために、サポートされているすべての Databricks Runtime LTS バージョンにコードがバックポートされていますが、対象はその Databricks Runtime で既にサポートされている機能のみです。 つまり、生成された列を有効にするためにテーブル機能を使用することにオプトインしても、Databricks Runtime 9.1 LTS で引き続きこれらのテーブルを操作できますが、ID 列が有効になっているテーブル (Databricks Runtime 10.4 LTS が必要) は、その Databricks Runtime ではまだサポートされません。
Azure Databricks では Delta Lake 機能の互換性はどのように管理されますか?
Databricks には、Databricks Runtime リリースの Delta Lake に基づいて構築された、新しい Delta Lake の機能と最適化のサポートが導入されています。 Delta Lake 機能を利用する Azure Databricks の最適化には、互換性のために、OSS Delta Lake で使用されるプロトコルが適用されます。 多くの Azure Databricks の最適化では、テーブルで Delta Lake の機能を有効にする必要があります。また、Lakeflow 宣言パイプラインなどの一部の Azure 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 ランタイム バージョン
機能はテーブルごとに有効になります。 次の表に、指定された機能を完全にサポートする Databricks Runtime の最小バージョンを示します。 完全サポートとは、読み取りと書き込みの両方で一般公開されているすべての機能がサポートされることを意味します。
機能 | 必要な最小の Databricks Runtime バージョン | ドキュメント |
---|---|---|
CHECK 制約 |
サポートされているすべての Databricks ランタイム バージョン |
Azure Databricks で CHECK 制約を設定する |
データ フィードの変更 | サポートされているすべての Databricks ランタイム バージョン | Azure Databricks で Delta Lake 変更データ フィードを使用する |
生成列 | サポートされているすべての Databricks ランタイム バージョン | Delta Lake で生成された列 |
列マッピング | サポートされているすべての Databricks ランタイム バージョン | Delta Lake の列マッピングを使用して列の名前変更と削除を行う |
ID 列 | サポートされているすべての Databricks ランタイム バージョン | Delta Lake で ID 列を使用する |
テーブル機能 | Databricks Runtime 12.2 LTS | プロトコルの互換性に関する表の機能 |
削除ベクトル | Databricks Runtime 12.2 LTS | 削除ベクトルとは |
タイムスタンプNTZ | Databricks Runtime 13.3 LTS |
TIMESTAMP_NTZ 型 |
ユニフォーム | Databricks Runtime 13.3 LTS | Iceberg クライアントで Delta テーブルを読み取る |
リキッド クラスタリング | Databricks Runtime 13.3 LTS | テーブルに液体クラスタリングを使用する |
行追跡 | Databricks Runtime 14.3 LTS | Delta テーブルの行追跡を使用する |
型の拡張 | Databricks Runtime 15.4 LTS | 型の拡張 |
変種 | Databricks Runtime 15.4 LTS | Delta Lake でのバリアント のサポート |
照合順序 | Databricks Runtime 16.1 | Delta Lake の照合順序のサポート |
保護されたチェックポイント | Databricks Runtime 16.3(データブリックス ランタイム 16.3) | Delta Lake テーブル機能を削除し、テーブル プロトコルをダウングレードする |
「Databricks Runtime リリース ノートのバージョンと互換性」を参照してください。
注
Lakeflow 宣言型パイプラインと Databricks SQL は、新しい機能をサポートするために、通常のリリースでランタイム環境を自動的にアップグレードします。 Lakeflow 宣言型パイプラインのリリース ノートとリリース アップグレード プロセスと Databricks SQL リリース ノートを参照してください。
プロトコル バージョン別の機能
OSS Delta Lake プロトコルはテーブル機能で標準化されていますが、一部のリーダーおよびライター クライアントではテーブル機能のサポートが実装されておらず、従来の minWriterVersion
プロトコルと minReaderVersion
プロトコルが引き続き使用されています。
一部のクライアントでは、レガシ プロトコルのバージョン管理を使用する機能など、すべての Delta Lake 機能がサポートされていない場合があります。 機能のサポートを確認するには、Delta Lake クライアントのドキュメントを参照してください。 運用環境のテーブルで新機能を有効にする前に、互換性を常にテストしてください。
次の表は、Delta Lake 機能に必要なリーダーとライターのプロトコルの最小バージョンと、テーブル機能を書き込み専用にするか、読み取りと書き込みの両方に適用する必要があるかを示しています。
注
Databricks ランタイムの互換性にのみ関心がある場合は、「 Azure Databricks で Delta Lake 機能の互換性を管理する方法」を参照してください。
機能 | minWriterVersion |
minReaderVersion |
テーブル機能 |
---|---|---|---|
基本的な機能 | 2 | 1 | 作家 |
CHECK 制約 |
3 | 1 | 作家 |
データ フィードの変更 | 4 | 1 | 作家 |
生成された列 | 4 | 1 | 作家 |
列マッピング | 5 | 2 | 読み手と書き手 |
ID 列 | 6 | 1 | 作家 |
行追跡 | 7 | 1 | 作家 |
削除ベクトル | 7 | 3 | 読み手と書き手 |
TimestampNTZ | 7 | 3 | 読み手と書き手 |
液体クラスタリング | 7 | 3 | 読み手と書き手 |
アイスバーグリーダー (UniForm) | 7 | 2 | ライター (1) |
型の拡張 | 7 | 3 | 読み手と書き手 |
バリアント型 (Variant) | 7 | 3 | 読み手と書き手 |
照合順序 | 7 | 3 | 読み手と書き手 |
保護されたチェックポイント | 7 | 1 | 作家 |
(1): 列マッピングが有効になっている必要があります。