Delta Lake 機能の互換性とプロトコル
Delta Lake テーブルプロトコルは、クライアントがテーブルの読み取りまたは書き込みをサポートするために必要な機能を指定します。このページでは、プロトコルバージョン、テーブル機能、互換性要件、および Databricks がプロトコルアップグレードをどのように管理するかについて説明します。DESCRIBE DETAIL でテーブルの詳細を確認も参照してください。
テーブルプロトコルと互換性
すべての Delta Lake テーブルにはプロトコル仕様があり、そのテーブルへの読み書きに必要な機能のセットを示しています。アプリケーションはプロトコル仕様を使用して、テーブルが使用するすべての機能をサポートできるかどうかを判断します。アプリケーションがテーブルの現在のプロトコルで機能をサポートできない場合、そのアプリケーションはそのテーブルを読み書きできません。
ほとんどの新しいDelta Lake機能には、テーブルプロトコルのアップグレードが必要です。
次の表に、Delta Lake プロトコルを説明する主要な用語を示します。
規約 | 説明 |
|---|---|
Delta Lake クライアント | Delta Lake テーブルに読み取りまたは書き込みを行うあらゆるシステム |
プロトコルの読み取り | Delta Lake クライアントがテーブルを読み取るために必要となるサポートを指定します。 |
プロトコルの書き込み | Delta Lake クライアントがテーブルに書き込むために必要なサポートを指定します。 |
| リーダープロトコルの整数値。有効な値は |
| ライタープロトコルの整数値有効な値は、 |
テーブル特徴量 |
|
ライター機能 | 書き込みクライアントのサポートを必要とするテーブル機能ですが、読み取り専用アクセスはブロックしません。 |
リーダー機能 | 読み取りと書き込みの両方のクライアントサポートを必要とするテーブル機能。プロトコルバージョンとテーブル機能を参照してください。 |
書き込みプロトコルとライター機能は、ライター クライアントとの互換性にのみ影響し、レガシー ワークロードからテーブルへの読み取り専用アクセスを可能にします。
すべての Delta Lake 機能が互換性があるわけではありません。
一部のテーブル機能は、一度有効にすると削除できません。Delta Lake テーブル機能の削除およびテーブルプロトコルのダウングレードを参照してください。
プロトコルバージョンとテーブル機能
すべてのDelta Lakeテーブルには、minReaderVersionとminWriterVersionで表される整数ベースのプロトコルバージョンが含まれています。各バージョンは複数の機能をまとめてバンドルしており、機能はバージョン間で累積されます。Delta Lakeプロトコルに準拠するには、クライアントは、以前にリリースされたすべての機能を含む、特定のバージョンのすべての機能のサポートを実装する必要があります。
Databricks Runtime 12.2 LTS 以降では、 テーブル機能 により、整数ベースのプロトコルが、テーブルが使用する機能を示す詳細なフラグに置き換わります。これにより、クライアントとテーブル間のよりきめ細かな互換性チェックが可能になります。
テーブルライター機能 は、データの書き込み方法に影響します。minWriterVersion=7 を必要としますが、リーダー クライアントをブロックしません。
テーブルリーダー機能 は、データの読み取り方法に影響します。すべてのリーダー機能はライター機能でもあり、minReaderVersion=3 と minWriterVersion=7 が必要です。クライアントは、読み取ることができないテーブルに書き込むことはできません。
テーブル機能が有効になっている場合、それらはプロトコルに readerFeatures または writerFeatures として表示されます。Delta Lake は、有効なすべての機能をサポートする最も低いバージョンにテーブルプロトコルを解決します。可能な限り低いプロトコルを参照してください。
Databricks は、サポートされているすべての Databricks Runtime のバージョンで、テーブル機能の非破壊的な部分的なサポートを含みます。OSS Delta Lake クライアントは、指定された機能のサポートをどのように実装するかを選択します。
プロトコルの変更
テーブルのプロトコルは、以下の条件で変更されます。
- 新しい機能が有効になると、プロトコルがアップグレードされます。
- テーブル機能が削除された場合、プロトコルはダウングレードされます。
テーブル機能をオフにしても、プロトコルはダウングレードされません。プロトコルから完全に削除するには、その機能を削除する必要があります。すべてのテーブル機能を削除できるわけではありません。Delta Lake テーブル機能の削除およびテーブルプロトコルのダウングレードを参照してください。
すべてのプロトコル変更操作は並列書き込みと競合します。ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇した場合に失敗します。続行するには、影響を受けるストリームを再起動します。推奨される方法については、構造化ストリーミングの本番運用に関する考慮事項を参照してください。
Databricksは、minReaderVersionとminWriterVersionテーブルのプロパティを直接変更しないことをお勧めします。これらのプロパティを変更してもプロトコルのアップグレードは妨げられず、それらを低い値に設定してもテーブルはダウングレードされません。Delta Lakeテーブル機能の削除およびテーブルプロトコルのダウングレードを参照してください。
プロトコルアップグレードをトリガーするもの
機能を有効にすると、テーブルプロトコルは自動的にアップグレードされます。
プロトコルのアップグレードは、以下の方法でトリガーされます。
CREATEまたはALTERステートメントで使用される構文に基づいて自動的に有効にします。例えば、CREATE TABLEステートメントのCLUSTER BYは、自動的にリキッドクラスタリングを有効にし、GENERATED ALWAYS ASは生成された列を有効にします。- テーブルプロパティを通じて明示的に有効にします。たとえば、
'delta.enableDeletionVectors' = trueを設定すると削除ベクトルが有効になります。 - 機能を有効にすると、必要な機能が自動的に有効になる場合があります。たとえば、UniFormを有効にすると自動的にカラムマッピングが有効になり、リキッドクラスタリングを有効にすると自動的にチェックポイントV2が有効になります。特定の機能に必要なテーブル機能を判断するために、関連するDatabricksドキュメントを確認してください。
リーダー機能は読み取りプロトコルと書き込みプロトコルの両方をアップグレードします。たとえば、列マッピングはリーダー機能であり、データがストレージに異なる方法で格納されているため、両方のプロトコルのアップグレードが必要です。
たとえば、CHECK 制約などのライター機能は、書き込みプロトコルのみをアップグレードします。
ほとんどのプロトコルバージョンアップグレードは元に戻すことができず、既存の Delta Lake テーブルリーダー、ライター、またはその両方に影響を与える可能性があります。必要な場合にのみ特定のテーブルをアップグレードし、現在および将来の本番運用ツールがすべて新しいプロトコルバージョンをサポートしていることを確認してください。
プロトコルのダウングレードは、一部の機能で使用できます。Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレードを参照してください。
可能な限り低いプロトコル
Delta Lakeは、有効なすべての機能をサポートする最も低いバージョンにテーブルプロトコルを解決します。これはminReaderVersionまたはminWriterVersionを下げることしかできず、上げることはできません。テーブルの特徴量が自動的に削除されることはありません。プロトコルからテーブル機能を削除するには、DROP FEATUREを使用します。
有効になっているすべての機能が下位の整数ベースのプロトコルバージョンで完全にサポートされている場合、テーブルはそのバージョンに戻り、プロトコルからreaderFeaturesまたはwriterFeaturesを削除する可能性があります。これにより、いかなる機能も無効になりません。下位のプロトコルバージョンは、すべてのクライアントがそれらを尊重する必要があるため、互換性を高めます。
DatabricksとDatabricks Runtimeの互換性
Databricks は、Databricks Runtime リリースで新しい Delta Lake 機能のサポートを導入しています。
- 下位のDatabricks Runtimeバージョンで書き込まれたテーブルは、上位のDatabricks Runtimeバージョンで完全な読み取りおよび書き込みをサポートしています。
- より上位のDatabricks Runtimeバージョンで書き込まれたテーブルは、下位のDatabricks Runtimeバージョンでサポートされていないテーブル機能を使用する可能性があります。
- 一部の機能では、有効な機能に対するすべての最適化を完全に適用することなく、それより低いDatabricks Runtimeバージョンからの書き込みが可能です。
Databricks を介してのみ Delta Lake テーブルを使用する場合、最小 Databricks Runtime 要件を使用して機能のサポートを追跡するだけで済みます。外部システムからテーブルを読み書きする場合、それらのクライアントがテーブルで有効になっているテーブル機能をサポートしていることを確認する必要があります。
バックポートされたテーブル機能のサポート
Databricks Runtime 12.2 LTS 以降では、テーブル機能によって、整数ベースのプロトコルが、テーブルが使用する機能を示すきめ細かいフラグに置き換えられました。
Databricksは、整数プロトコルバージョンのみをサポートするのではなく、Databricks Runtime 11.3 LTS以前にテーブル機能サポートをバックポートしましたが、そのリリースで既にサポートされている機能に限ります。
たとえば、Databricks Runtime 9.1 LTSでは、テーブル機能を使用して生成された列が有効になっているテーブルの読み書きを行うことができます。ただし、ID列にはDatabricks Runtime 10.4 LTS以降が必要なため、Databricks Runtime 9.1 LTSを使用して、テーブル機能でID列が有効になっているテーブルの読み書きを行うことはできません。
バックポートされたサポートを持つテーブル機能を使用する場合、特定のDatabricks Runtimeバージョンで利用できる一部の操作は、対応するOSS Delta Lakeバージョンでは利用できない場合があります。アーキテクチャにOSS Delta Lakeクライアントが含まれている場合、本番運用テーブルでテーブル機能を有効にする前に互換性をテストしてください。
Delta Lake 機能および必要な Databricks Runtime バージョン
次の表に、読み書きの両方で利用可能なすべての機能がサポートされる、各機能を完全にサポートする最低Databricks Runtimeバージョンを示します。
機能 | Databricks Runtimeのバージョン以降が必要です | ドキュメント |
|---|---|---|
| サポートされているすべての Databricks Runtime バージョン | |
チェンジデータフィード | サポートされているすべての Databricks Runtime バージョン | |
ジェネレーテッドカラム | サポートされているすべての Databricks Runtime バージョン | |
列マッピング | サポートされているすべての Databricks Runtime バージョン | |
ID列 | サポートされているすべての Databricks Runtime バージョン | |
テーブルの機能 | サポートされているすべての Databricks Runtime バージョン | |
削除ベクトル | サポートされているすべての Databricks Runtime バージョン | |
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リリース ノートを参照してください。
プロトコルバージョンごとの機能
Databricks Runtime の互換性については、Databricks と Databricks Runtime の互換性をご覧ください。
Delta Lake は、個別の minReaderVersion と minWriterVersion の値を使用してプロトコル機能を指定します。オープンソースのDelta Lakeプロトコルはテーブル機能に標準化されましたが、一部のクライアントは依然として従来のプロトコルバージョン管理を使用しています。一部のクライアントはすべての機能をサポートしていない可能性があるため、Databricks は、本番運用テーブルで新しい機能を有効にする前に、クライアントのドキュメントで確認し、互換性をテストすることをお勧めします。
Apache Iceberg は、個別のリーダーバージョンとライターバージョンではなく、単一の format-version を使用します。Iceberg フォーマットのバージョンは、どの機能が利用可能かを示しますが、その使用を義務付けるものではありません。 機能はオプトインですが、フォーマットバージョン3では行トラッキングが必須です。Iceberg列に「N/A」と表示されている機能は、Icebergに直接的な同等物がないDelta固有の機能です。
Delta LakeおよびApache Icebergテーブル機能のプロトコルバージョンの要件は、以下の表に記載されています。特徴量タイプは、ある特徴量が書き込みのみに適用されるか、または読み取りと書き込みの両方に適用されるかを示しています。
機能 | 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 | リーダーとライター |