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

Delta Lake 機能の互換性とプロトコル

Delta Lake テーブルプロトコルは、クライアントがテーブルの読み取りまたは書き込みをサポートするために必要な機能を指定します。このページでは、プロトコルバージョン、テーブル機能、互換性要件、および Databricks がプロトコルアップグレードをどのように管理するかについて説明します。DESCRIBE DETAIL でテーブルの詳細を確認も参照してください。

テーブルプロトコルと互換性

すべての Delta Lake テーブルにはプロトコル仕様があり、そのテーブルへの読み書きに必要な機能のセットを示しています。アプリケーションはプロトコル仕様を使用して、テーブルが使用するすべての機能をサポートできるかどうかを判断します。アプリケーションがテーブルの現在のプロトコルで機能をサポートできない場合、そのアプリケーションはそのテーブルを読み書きできません。

ほとんどの新しいDelta Lake機能には、テーブルプロトコルのアップグレードが必要です。

次の表に、Delta Lake プロトコルを説明する主要な用語を示します。

規約

説明

Delta Lake クライアント

Delta Lake テーブルに読み取りまたは書き込みを行うあらゆるシステム

プロトコルの読み取り

Delta Lake クライアントがテーブルを読み取るために必要となるサポートを指定します。

プロトコルの書き込み

Delta Lake クライアントがテーブルに書き込むために必要なサポートを指定します。

minReaderVersion

リーダープロトコルの整数値。有効な値は 12、または 3 です。

minWriterVersion

ライタープロトコルの整数値有効な値は、2から7までの整数です。

テーブル特徴量

minReaderVersion = 3 および minWriterVersion = 7 の場合に使用される、プロトコルバージョンに代わるきめ細かな代替手段です。テーブル機能は、オプションで有効化された Delta Lake 機能にマップされます。

ライター機能

書き込みクライアントのサポートを必要とするテーブル機能ですが、読み取り専用アクセスはブロックしません。

リーダー機能

読み取りと書き込みの両方のクライアントサポートを必要とするテーブル機能。プロトコルバージョンとテーブル機能を参照してください。

書き込みプロトコルとライター機能は、ライター クライアントとの互換性にのみ影響し、レガシー ワークロードからテーブルへの読み取り専用アクセスを可能にします。

すべての Delta Lake 機能が互換性があるわけではありません。

一部のテーブル機能は、一度有効にすると削除できません。Delta Lake テーブル機能の削除およびテーブルプロトコルのダウングレードを参照してください。

プロトコルバージョンとテーブル機能

すべてのDelta Lakeテーブルには、minReaderVersionminWriterVersionで表される整数ベースのプロトコルバージョンが含まれています。各バージョンは複数の機能をまとめてバンドルしており、機能はバージョン間で累積されます。Delta Lakeプロトコルに準拠するには、クライアントは、以前にリリースされたすべての機能を含む、特定のバージョンのすべての機能のサポートを実装する必要があります。

Databricks Runtime 12.2 LTS 以降では、 テーブル機能 により、整数ベースのプロトコルが、テーブルが使用する機能を示す詳細なフラグに置き換わります。これにより、クライアントとテーブル間のよりきめ細かな互換性チェックが可能になります。

テーブルライター機能 は、データの書き込み方法に影響します。minWriterVersion=7 を必要としますが、リーダー クライアントをブロックしません。

テーブルリーダー機能 は、データの読み取り方法に影響します。すべてのリーダー機能はライター機能でもあり、minReaderVersion=3minWriterVersion=7 が必要です。クライアントは、読み取ることができないテーブルに書き込むことはできません。

テーブル機能が有効になっている場合、それらはプロトコルに readerFeatures または writerFeatures として表示されます。Delta Lake は、有効なすべての機能をサポートする最も低いバージョンにテーブルプロトコルを解決します。可能な限り低いプロトコルを参照してください。

注記

Databricks は、サポートされているすべての Databricks Runtime のバージョンで、テーブル機能の非破壊的な部分的なサポートを含みます。OSS Delta Lake クライアントは、指定された機能のサポートをどのように実装するかを選択します。

プロトコルの変更

テーブルのプロトコルは、以下の条件で変更されます。

  • 新しい機能が有効になると、プロトコルがアップグレードされます。
  • テーブル機能が削除された場合、プロトコルはダウングレードされます。

テーブル機能をオフにしても、プロトコルはダウングレードされません。プロトコルから完全に削除するには、その機能を削除する必要があります。すべてのテーブル機能を削除できるわけではありません。Delta Lake テーブル機能の削除およびテーブルプロトコルのダウングレードを参照してください。

すべてのプロトコル変更操作は並列書き込みと競合します。ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇した場合に失敗します。続行するには、影響を受けるストリームを再起動します。推奨される方法については、構造化ストリーミングの本番運用に関する考慮事項を参照してください。

注記

Databricksは、minReaderVersionminWriterVersionテーブルのプロパティを直接変更しないことをお勧めします。これらのプロパティを変更してもプロトコルのアップグレードは妨げられず、それらを低い値に設定してもテーブルはダウングレードされません。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のバージョン以降が必要です

ドキュメント

CHECK 制約

サポートされているすべての Databricks Runtime バージョン

CHECK 制約

チェンジデータフィード

サポートされているすべての Databricks Runtime バージョン

Databricksでチェンジデータフィードを使用する

ジェネレーテッドカラム

サポートされているすべての Databricks Runtime バージョン

Delta Lakeのジェネレーテッドカラム

列マッピング

サポートされているすべての Databricks Runtime バージョン

Delta Lake列マッピングを使用した列の名前変更と削除

ID列

サポートされているすべての Databricks Runtime バージョン

ID列

テーブルの機能

サポートされているすべての Databricks Runtime バージョン

プロトコルバージョンとテーブル機能

削除ベクトル

サポートされているすべての Databricks Runtime バージョン

Databricks の削除ベクトル

TimestampNTZ

Databricks Runtime 13.3 LTS

TIMESTAMP_NTZ タイプ

UniForm

Databricks Runtime 13.3 LTS

UniForm を使用して Iceberg クライアントで Delta Lake テーブルを読み取ります。

リキッドクラスタリング

Databricks Runtime 13.3 LTS

テーブルにリキッドクラスタリングを使用する

行トラッキング

Databricks Runtime 14.3 LTS

Databricks の行追跡

型の拡張

Databricks Runtime 15.4 LTS

型の拡張

バリアント

Databricks Runtime 15.4 LTS

Apache IcebergとDelta Lakeのバリアントタイプサポート

照合

Databricks Runtime 16.1

Delta Lakeの照合サポート

保護されたチェックポイント

Databricks Runtime 16.3

Delta Lake テーブル機能の削除およびテーブル プロトコルのダウングレード

カタログコミット

Databricks Runtime 16.4 LTS

カタログコミット

Databricks Runtime リリースノートのバージョンと互換性を参照してください。

注記

Lakeflow Spark宣言型パイプラインとDatabricks SQL新機能をサポートするために定期リリースでランタイム環境を自動的にアップグレードします。 Lakeflow Spark宣言型パイプライン リリース ノート、リリース アップグレード プロセス、およびDatabricks SQLリリース ノートを参照してください。

プロトコルバージョンごとの機能

注記

Databricks Runtime の互換性については、Databricks と Databricks Runtime の互換性をご覧ください。

Delta Lake は、個別の minReaderVersionminWriterVersion の値を使用してプロトコル機能を指定します。オープンソースのDelta Lakeプロトコルはテーブル機能に標準化されましたが、一部のクライアントは依然として従来のプロトコルバージョン管理を使用しています。一部のクライアントはすべての機能をサポートしていない可能性があるため、Databricks は、本番運用テーブルで新しい機能を有効にする前に、クライアントのドキュメントで確認し、互換性をテストすることをお勧めします。

Apache Iceberg は、個別のリーダーバージョンとライターバージョンではなく、単一の format-version を使用します。Iceberg フォーマットのバージョンは、どの機能が利用可能かを示しますが、その使用を義務付けるものではありません。 機能はオプトインですが、フォーマットバージョン3では行トラッキングが必須です。Iceberg列に「N/A」と表示されている機能は、Icebergに直接的な同等物がないDelta固有の機能です。

Delta LakeおよびApache Icebergテーブル機能のプロトコルバージョンの要件は、以下の表に記載されています。特徴量タイプは、ある特徴量が書き込みのみに適用されるか、または読み取りと書き込みの両方に適用されるかを示しています。

機能

Delta minWriterVersion

Delta minReaderVersion

Iceberg format-version

特徴量タイプ

基本的な機能

2

1

1

ライター

CHECK 制約

3

1

N/A

ライター

チェンジデータフィード

4

1

N/A

ライター

ジェネレーテッドカラム

4

1

N/A

ライター

列マッピング

5

2

N/A

リーダーとライター

ID列

6

1

N/A

ライター

行トラッキング

7

1

3

ライター

削除ベクトル

7

3

3

リーダーとライター

TimestampNTZ

7

3

1

リーダーとライター

リキッドクラスタリング

7

3

1

リーダーとライター (1)

Icebergリーダー(UniForm)

7

2

N/A

ライター (2)

型の拡張

7

3

N/A

リーダーとライター

バリアント

7

3

3

リーダーとライター

VARIANTシュレッディング

7

3

3

リーダーとライター

照合

7

3

N/A

リーダーとライター

保護されたチェックポイント

7

1

N/A

ライター

カタログコミット

7

3

N/A

リーダーとライター

(1) :リキッドクラスタリングは、隠しパーティショニングを実装しています。

(2) :列マッピングを有効にする必要があります。