Databricks は Delta Lake 機能の互換性をどのように管理していますか?
Delta Lakeは、Linux Foundationのガバナンス下にある独立したオープンソースプロジェクトです。 Databricks では、Databricks Runtime リリースで Delta Lake の上に構築される新しい Delta Lake 機能と最適化のサポートが導入されています。
Delta Lake の機能を活用する Databricks の最適化では、互換性のために OSS Delta Lake で使用されるプロトコルが尊重されます。
多くの Databricks 最適化では、テーブルで Delta Lake 機能を有効にする必要があります。 Delta Lake の機能には常に下位互換性があるため、下位の Databricks Runtime バージョンによって書き込まれたテーブルは、常に上位の Databricks Runtime バージョンで読み書きできます。 一部の機能を有効にすると、下位の Databricks Runtime バージョンで実行されているワークロードとの上位互換性が損なわれます。 上位互換性を損なう機能については、アップグレードされたテーブルを参照するすべてのワークロードを更新して、準拠している Databricks Runtime バージョンを使用する必要があります。
Databricks では、 deletionVectors
、 v2Checkpoint
、 columnMapping
、 typeWidening-preview
、 collations-preview
をドロップできます。 ドロップDeltaテーブル機能を参照してください。
すべてのプロトコル変更操作は、すべての並列書き込みと競合します。
ストリーミング読み取りは、テーブルのメタデータを変更するコミットを検出すると失敗します。 ストリームを続行する場合は、ストリームを再起動する必要があります。 推奨される方法については、 構造化ストリーミングの本番運用に関する考慮事項を参照してください。
Delta Lake のどの機能に Databricks Runtime のアップグレードが必要ですか?
次の Delta Lake 機能は、上位互換性を破ります。 機能はテーブルごとに有効になります。 次の表に、Databricks で引き続きサポートされている最も低い Databricks Runtime バージョンを示します。
機能 | Databricks Runtime バージョン以降が必要です | ドキュメント |
---|---|---|
| Databricks Runtime 9.1 LTS | |
チェンジデータフィード | Databricks Runtime 9.1 LTS | |
生成済み列 | Databricks Runtime 9.1 LTS | |
列マッピング | Databricks Runtime 10.4 LTS | |
ID 列 | Databricks Runtime 10.4 LTS | |
tableFeatures | Databricks Runtime 12.2 LTS | |
削除ベクトル | Databricks Runtime 12.2 LTS | |
タイムスタンプNTZ | Databricks Runtime 13.3 LTS | |
UniForm | Databricks Runtime 13.3 LTS | |
リキッドクラスタリング | Databricks Runtime 13.3 LTS | |
行追跡 | Databricks Runtime 14.1 | |
型拡張 | Databricks Runtime 15.2 | |
バリエーション | Databricks Runtime 15.3 | |
照合 順序 | Databricks Runtime 16.1 |
Databricks Runtimeリリースノートのバージョンと互換性を参照してください。
DLT と Databricks SQL は、新機能をサポートするために、定期的なリリースでランタイム環境を自動的にアップグレードします。DLT リリースノートとリリースアップグレードプロセスおよびDatabricks SQLリリースノートを参照してください。
テーブルプロトコル仕様とは何ですか?
すべての Delta テーブルには、テーブルがサポートする機能のセットを示すプロトコル仕様があります。 プロトコル仕様は、テーブルの読み取りまたは書き込みを行うアプリケーションによって使用され、テーブルがサポートするすべての機能を処理できるかどうかを判断します。 テーブルのプロトコルでサポート対象としてリストされている機能の処理方法をアプリケーションが知らない場合、そのアプリケーションはそのテーブルの読み取りまたは書き込みができません。
プロトコル仕様は、 読み取りプロトコルと書き込みプロトコルの2つのコンポーネントに分かれています。
ほとんどのプロトコル バージョンのアップグレードは元に戻せないため、プロトコル バージョンをアップグレードすると、既存の Delta Lake テーブル リーダー、ライター、またはその両方が中断される可能性があります。 Databricks では、Delta Lake の新機能にオプトインするなど、必要な場合にのみ特定のテーブルをアップグレードすることをお勧めします。 また、現在および将来のすべての本番運用ツールが、新しいプロトコルバージョンの Delta Lake テーブルをサポートしていることも確認する必要があります。
プロトコルのダウングレードは、一部の機能で使用できます。 ドロップDeltaテーブル機能を参照してください。
読み取りプロトコル
読み取りプロトコルには、テーブルがサポートし、アプリケーションがテーブルを正しく読み取るために理解する必要のあるすべての機能がリストされています。 テーブルの読み取りプロトコルをアップグレードするには、すべてのリーダーアプリケーションが追加機能をサポートしている必要があります。
Delta テーブルに書き込むすべてのアプリケーションは、テーブルのスナップショットを構築できる必要があります。 そのため、Delta テーブルに書き込むワークロードは、リーダーとライターの両方のプロトコル要件を尊重する必要があります。
Databricks のワークロードでサポートされていないプロトコルに遭遇した場合は、そのプロトコルをサポートする上位の Databricks Runtime にアップグレードする必要があります。
書き込みプロトコル
書き込みプロトコルには、テーブルがサポートするすべての機能と、テーブルに正しく書き込むためにアプリケーションが理解する必要があるすべての機能がリストされています。 テーブルの書き込みプロトコルをアップグレードするには、すべてのライター・アプリケーションが追加機能をサポートしている必要があります。 読み取りプロトコルもアップグレードされない限り、読み取り専用アプリケーションには影響しません。
どのプロトコルをアップグレードする必要がありますか?
一部の機能では、読み取りプロトコルと書き込みプロトコルの両方をアップグレードする必要があります。 その他の機能では、書き込みプロトコルをアップグレードするだけで済みます。
例として、CHECK
制約のサポートは書き込みプロトコル機能です。CHECK
制約について知って適用する必要があるのは、書き込みアプリケーションだけです。
これに対し、カラムマッピングでは、読み取りプロトコルと書き込みプロトコルの両方をアップグレードする必要があります。 データはテーブルに異なる方法で格納されるため、リーダー アプリケーションは、データを正しく読み取るために列のマッピングを理解する必要があります。
リーダーとライターの最低バージョン
列マッピングを有効にする場合は、テーブル プロトコル バージョンを明示的にアップグレードする必要があります。
テーブルで Delta 機能を有効にすると、テーブルプロトコルが自動的にアップグレードされます。 Databricks では、 minReaderVersion
テーブルと minWriterVersion
テーブルのプロパティを変更しないことをお勧めします。 これらのテーブル・プロパティを変更しても、プロトコルのアップグレードは妨げられません。 これらの値を低い値に設定しても、テーブルはダウングレードされません。 ドロップDeltaテーブル機能を参照してください。
テーブル機能とは?
Databricks Runtime 12.2 LTS 以降では、Delta Lake テーブル機能によって、特定のテーブルでサポートされている機能を指定する詳細なフラグが導入されます。 Databricks Runtime 11.3 LTS 以下では、Delta Lake の機能は プロトコル バージョン と呼ばれるバンドルで有効になっていました。 テーブル機能は、プロトコル バージョンの後継であり、Delta Lake の読み取りと書き込みを行うクライアントの柔軟性を向上させることを目的として設計されています。 「プロトコル バージョンとは」を参照してください。
テーブル機能には、プロトコルバージョン要件があります。 プロトコルバージョン別の機能を参照してください。
Delta テーブル フィーチャは、テーブルが特定のフィーチャをサポートしていることを示すマーカーです。 すべての機能は、書き込みプロトコル機能(書き込みプロトコルをアップグレードするだけ)または読み取り/書き込みプロトコル機能(読み取りプロトコルと書き込みプロトコルの両方がアップグレードされて機能が有効になる)のいずれかです。
Delta Lake でサポートされているテーブル機能の詳細については、 Delta Lake プロトコルを参照してください。
テーブル機能によって Delta Lake 機能の有効化方法が変わりますか?
Databricks を介してのみ Delta テーブルを操作する場合は、Databricks Runtime の最小要件を使用して、Delta Lake 機能のサポートを引き続き追跡できます。 Databricks では、テーブルで使用されるすべての機能がそのリリースでサポートされている限り、すべての Databricks Runtime LTS リリースでテーブル機能にアップグレードされた Delta テーブルの読み取りがサポートされています。
他のシステムを使用して Delta テーブルから読み取りと書き込みを行う場合は、アップグレードされたプロトコル バージョンをシステムが理解できないリスクがあるため、テーブル機能が互換性にどのように影響するかを考慮する必要があります。
テーブル機能は、ライター バージョン 7 とリーダー バージョン 3 の Delta Lake 形式に導入されました。Databricks は、サポートされているすべての Databricks Runtime LTS バージョンにコードをバックポートして、テーブル機能のサポートを追加しましたが、 その Databricks Runtime で既にサポートされている機能のみを対象としています 。 つまり、テーブル機能を使用して生成された列を有効にし、Databricks Runtime 9.1 LTS でこれらのテーブルを引き続き操作することはできますが、ID 列が有効になっているテーブル (Databricks Runtime 10.4 LTS が必要) は、その Databricks Runtime ではまだサポートされていません。
プロトコルバージョンとは何ですか?
プロトコル・バージョンは、テーブル機能の特定のグループを示すプロトコル番号です。 Databricks Runtime 11.3 LTS 以下では、テーブル機能を個別に有効にすることはできません。 プロトコル バージョンには、機能のグループがバンドルされています。
Delta テーブルでは、読み取りプロトコルと書き込みプロトコルに個別のプロトコル バージョンが指定されています。 Delta テーブルのトランザクション ログには、Delta Lake の進化をサポートするプロトコルのバージョン管理情報が含まれています。 「Delta Lake テーブルの詳細の確認と詳細の説明」を参照してください。
プロトコルバージョンには、以前のプロトコルのすべての機能がバンドルされています。 プロトコルバージョン別の機能を参照してください。
ライター バージョン 7 とリーダー バージョン 3 以降、Delta Lake ではテーブル機能の概念が導入されました。 テーブル機能を使用して、データ エコシステム内の他のクライアントでサポートされている機能のみを有効にすることを選択できるようになりました。 テーブル機能とはを参照してください。
プロトコルバージョン別の機能
次の表は、Delta Lake の機能に必要な最小プロトコル バージョンを示しています。
Databricks Runtime の互換性のみに関心がある場合は、「 Databricks Runtime のアップグレードが必要な Delta Lake 機能」を参照してください。 Delta Sharing では、 minReaderVersion
= 1
を必要とする機能を持つテーブルの読み取りのみがサポートされています。
機能 |
|
| ドキュメント |
---|---|---|---|
基本機能 | 2 | 1 | |
| 3 | 1 | |
チェンジデータフィード | 4 | 1 | |
生成済み列 | 4 | 1 | |
列マッピング | 5 | 2 | |
ID 列 | 6 | 2 | |
テーブルの特徴は読めます | 7 | 1 | |
テーブルの特徴の書き込み | 7 | 3 | |
行追跡 | 7 | 1 | |
削除ベクトル | 7 | 3 | |
タイムスタンプNTZ | 7 | 3 | |
リキッドクラスタリング | 7 | 3 | |
UniForm | 7 | 2 | |
型拡張 | 7 | 3 | |
バリエーション | 7 | 3 | |
照合 順序 | 7 | 3 |