Azure Databricks で Delta Lake 機能の互換性を管理する方法

Delta Lake は、Linux Foundation のガバナンス下にある独立したオープンソース プロジェクトです。 Databricks には、Databricks Runtime リリースの Delta Lake に基づいて構築された、新しい Delta Lake の機能と最適化のサポートが導入されています。

Delta Lake 機能を利用する Azure Databricks の最適化には、互換性のために、OSS Delta Lake で使用されるプロトコルが適用されます。

多くの Azure Databricks の最適化では、テーブルで Delta Lake 機能を有効にする必要があります。 Delta Lake 機能は常に下位互換性があるため、低次の Databricks Runtime バージョンで書き込まれたテーブルは、高次の Databricks Runtime バージョンで常に読み取り/書き込みできます。 一部の機能を有効にすると、Databricks Runtime のバージョンが低い状態で実行されているワークロードへの上位互換性がなくなります。 上位互換性を損なう機能については、アップグレードされたテーブルを参照するすべてのワークロードを更新して、準拠している Databricks Runtime バージョンを使用する必要があります。

Note

Azure Databricks で deletionVectorsv2Checkpoint を削除できます。 「Delta テーブル機能の削除」を参照してください。

重要

すべてのプロトコル変更操作は、すべての同時書き込みと競合します。

ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇すると失敗します。 ストリームを継続したい場合は、再起動する必要があります。 推奨される方法については、「Azure Databricks での構造化ストリーミング アプリケーションの運用に関する考慮事項」を参照してください。

Databricks Runtime のアップグレードが必要な Delta Lake の機能は何ですか?

次の Delta Lake 機能により、上位互換性が損なわれます。 機能はテーブルごとに有効になります。 次の表に、Azure Databricks で引き続きサポートされている最小の Databricks Runtime バージョンを示します。

機能 必要な最小の Databricks Runtime バージョン ドキュメント
CHECK constraints Databricks Runtime 9.1 LTS Azure Databricks で CHECK 制約を設定する
データ フィードの変更 Databricks Runtime 9.1 LTS Azure Databricks で Delta Lake 変更データ フィードを使用する
生成列 Databricks Runtime 9.1 LTS Delta Lake で生成された列
列マッピング Databricks Runtime 10.4 LTS Delta Lake の列マッピングを使用して列の名前変更と削除を行う
ID 列 Databricks Runtime 10.4 LTS Delta Lake で ID 列を使用する
テーブル機能 Databricks Runtime 12.1 (サポート対象外) テーブル機能とは何ですか?
削除ベクトル Databricks Runtime 12.1 (サポート対象外) 削除ベクトルとは
TimestampNTZ Databricks Runtime 13.0 (サポート対象外) TIMESTAMP_NTZ type
UniForm Databricks Runtime 13.2 (サポート対象外) Iceberg テーブルと Delta テーブルとの互換性を保つ Universal Format (UniForm)
リキッド クラスタリング Databricks Runtime 13.3 LTS Delta テーブルに Liquid Clustering クラスタリングを使用する

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

Note

Delta Live Tables と Databricks SQL は、新しい機能をサポートするために、定期的なリリースでランタイム環境を自動的にアップグレードします。 「Delta Live Tables のリリース ノートとリリース アップグレード プロセス」と「Databricks SQL リリース ノート」を参照してください。

テーブル プロトコル仕様とは何ですか?

すべての Delta テーブルには、テーブルがサポートする一連の機能を示すプロトコル仕様があります。 プロトコル仕様は、テーブルの読み取りまたは書き込みを行うアプリケーションによって、テーブルがサポートするすべての機能を処理できるかどうかを判断するために使用されます。 テーブルのプロトコルでサポートされている機能の処理方法がアプリケーションで不明な場合、そのアプリケーションはそのテーブルの読み取りまたは書き込みを行うことができません。

プロトコル仕様は、"読み取りプロトコル" と "書き込みプロトコル" という 2 つのコンポーネントに分かれています。

警告

ほとんどのプロトコル バージョンのアップグレードは、元に戻すことができません。プロトコル バージョンをアップグレードすると、既存の Delta Lake テーブル リーダー、ライター、またはその両方が破損する場合があります。 Databricks では、Delta Lake の新機能をオプトインする場合など、必要な場合にのみ特定のテーブルをアップグレードすることをお勧めします。 また、現在および今後のすべての運用ツールによって、新しいプロトコル バージョンの Delta Lake テーブルがサポートされていることを確認する必要があります。

プロトコルのダウングレードは、一部の機能で利用できます。 「Delta テーブル機能の削除」を参照してください。

読み取りプロトコル

読み取りプロトコルによって、テーブルでサポートされているすべての機能と、テーブルを正しく読み取るためにアプリケーションが理解する必要がある機能が示されます。 テーブルの読み取りプロトコルをアップグレードするには、追加された機能がすべてのリーダー アプリケーションでサポートされている必要があります。

重要

Delta テーブルに書き込むすべてのアプリケーションは、テーブルのスナップショットを作成できる必要があります。 そのため、Delta テーブルに書き込むワークロードについては、リーダー プロトコルとライター プロトコルの両方の要件を適用する必要があります。

Azure Databricks 上のワークロードでサポートされていないプロトコルが発生した場合は、そのプロトコルをサポートする上位の Databricks Runtime にアップグレードする必要があります。

書き込みプロトコル

書き込みプロトコルによって、テーブルでサポートされているすべての機能と、テーブルに正しく書き込むためにアプリケーションが理解する必要がある機能が示されます。 テーブルの書き込みプロトコルをアップグレードするには、追加された機能がすべてのライター アプリケーションでサポートされている必要があります。 読み取りプロトコルもアップグレードするのでない限り、読み取り専用アプリケーションには影響しません。

どのプロトコルをアップグレードする必要がありますか?

一部の機能では、読み取りプロトコルと書き込みプロトコルの両方をアップグレードする必要があります。 その他の機能では、書き込みプロトコルのアップグレードのみが必要です。

たとえば、CHECK 制約のサポートは書き込みプロトコルの機能です。CHECK 制約について理解し、それらを適用する必要があるのは、書き込みアプリケーションだけです。

これに対し、列マッピングでは、読み取りと書き込みの両方のプロトコルをアップグレードする必要があります。 データはテーブルに格納される方法が異なるため、リーダー アプリケーションは、データを正しく読み取ることができるように、列マッピングを理解する必要があります。

リーダーとライターの最小バージョン

Note

列マッピングを有効にするとき、テーブル プロトコルのバージョンを明示的にアップグレードする必要があります。

テーブルで Delta 機能を有効にすると、テーブル プロトコルが自動的にアップグレードされます。 Databricks では、minReaderVersionminWriterVersion テーブルのプロパティを変更するを推奨していません。 これらのテーブルのプロパティを変更しても、プロトコルのアップグレードが防止されることはありません。 これらの値を小さい値に設定しても、テーブルがダウングレードされることはありません。 「Delta テーブル機能の削除」を参照してください。

テーブル機能とは何ですか?

Databricks Runtime 12.1 以降では、Delta Lake テーブル機能に、特定のテーブルでサポートされている機能を指定する詳細なフラグが導入されています。 Databricks Runtime 12.0 以前は、Delta Lake の機能は "プロトコル バージョン" と呼ばれるバンドルで有効化されていました。 テーブル機能はプロトコル バージョンの後継機能であり、Delta Lake の読み取りと書き込みを行うクライアントの柔軟性向上を目的として設計されています。 「プロトコル バージョンとは何ですか?」を参照してください。

Note

テーブル機能には、プロトコル バージョンの要件があります。 「プロトコル バージョン別の機能」を参照してください。

Delta テーブル機能は、テーブルが特定の機能をサポートしていることを示すマーカーです。 すべての機能は、書き込みプロトコル機能 (書き込みプロトコルのみをアップグレードすることを意味します) または読み取り/書き込みプロトコル機能 (つまり、読み取りと書き込みの両方のプロトコルがアップグレードされて機能が有効になることを意味します) のいずれかです。

Delta Lake でサポートされているテーブル機能の詳細については、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 ではまだサポートされません。

プロトコル バージョンとは何ですか?

プロトコル バージョンは、テーブル機能の特定のグループを示すプロトコル番号です。 Databricks Runtime 12.0 以下では、テーブル機能を個別に有効にすることはできません。 プロトコル バージョンに機能のグループがバンドルされます。

Delta テーブルでは、読み取りプロトコルと書き込みプロトコルに別々のプロトコル バージョンが指定されます。 Delta テーブルのトランザクション ログには、Delta Lake の進化を示すプロトコル バージョン情報が含まれています。 「describe detail を使用して Delta Lake テーブルの詳細を確認する」を参照してください。

プロトコル バージョンには、以前のプロトコルのすべての機能がバンドルされます。 「プロトコル バージョン別の機能」を参照してください。

Note

ライター バージョン 7 とリーダー バージョン 3 以降、Delta Lake にテーブル機能の概念が導入されました。 テーブル機能を使用して、他のクライアントによってサポートされている機能のみをデータ エコシステム内で有効にすることを選択できるようになりました。 「テーブル機能とは何ですか?」を参照してください。

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

次の表は、Delta Lake 機能に必要な最小のプロトコル バージョンを示しています。

Note

Databricks Runtime の互換性にのみ関心がある場合は、「Databricks Runtime のアップグレードが必要な Delta Lake 機能は何ですか?」を参照してください。 Delta Sharing では、minReaderVersion = 1 を必要とする機能を持つテーブルの読み取りのみがサポートされます。

機能 minWriterVersion minReaderVersion ドキュメント
基本的な機能 2 1 Delta Lake とは
CHECK constraints 3 1 Azure Databricks で CHECK 制約を設定する
データ フィードの変更 4 1 Azure Databricks で Delta Lake 変更データ フィードを使用する
生成列 4 1 Delta Lake で生成された列
列マッピング 5 2 Delta Lake の列マッピングを使用して列の名前変更と削除を行う
ID 列 6 2 Delta Lake で ID 列を使用する
テーブル機能読み取り 7 1 テーブル機能とは何ですか?
テーブル機能書き込み 7 3 テーブル機能とは何ですか?
削除ベクトル 7 3 削除ベクトルとは
TimestampNTZ 7 3 TIMESTAMP_NTZ type
リキッド クラスタリング 7 3 Delta テーブルに Liquid Clustering クラスタリングを使用する
UniForm 7 2 Iceberg テーブルと Delta テーブルとの互換性を保つ Universal Format (UniForm)