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
をドロップできます。 Drop 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 |
|
テーブル機能 |
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 バージョンと互換性を参照してください。
注
Delta Live Tables および Databricks SQL は、新機能をサポートするために、ランタイム環境を通常のリリースで自動的にアップグレードします。 「 Delta Live Tables リリースノート」および「リリース アップグレード プロセス」および「 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 |