この記事では、Delta Lake テーブルの機能を削除し、プロトコル バージョンをダウングレードする方法について説明します。
この機能は、Databricks Runtime 16.3 以降で使用できます。 すべての Delta テーブルフィーチャを削除できるわけではありません。 削除できる Delta テーブルの機能を参照してください。
以前のバージョンの Databricks Runtime、Delta Sharing、または外部の Delta Lake リーダーまたはライター クライアントとの互換性をサポートするには、 DROP FEATURE のみを使用する必要があります。
注
databricks Runtime 14.3 LTS 以降では、 DROP FEATURE のレガシ サポートを利用できます。 Databricks では、従来の動作に代わるすべての DROP FEATURE コマンドに Databricks Runtime 16.3 以降を使用することをお勧めします。 レガシー機能のドキュメントについては、Deltaテーブル機能の削除(レガシー)を参照してください。
Delta Lake 機能を削除する
テーブル機能を削除するには、次の構文を使用します。
ALTER TABLE <table-name> DROP FEATURE <feature-name>
Databricks Runtime 16.3 以降を使用し、ターゲット Delta テーブルに対する MODIFY 特権を持っている必要があります。 各 DROP FEATURE コマンドで削除できるテーブル機能は 1 つだけです。
詳細については、ALTER TABLEを参照してください。
重要
すべての DROP FEATURE 操作は、すべての同時書き込みと競合します。
ストリーミング読み取りは、テーブルメタデータを変更するコミットに遭遇すると失敗します。 ストリームを継続したい場合は、再起動する必要があります。 推奨される方法については、「 構造化ストリーミングの運用に関する考慮事項」を参照してください。
テーブル機能が削除されるとどうなりますか?
テーブル機能を削除すると、Delta Lake によってテーブルへの変更がアトミックにコミットされ、次の処理が実行されます。
- テーブル機能を使用するテーブル プロパティを無効にします。
- 現在のバージョンのテーブルをバックアップしているデータ ファイルからテーブル機能のすべてのトレースを削除するには、必要に応じてデータ ファイルを書き換えます。
- リーダー クライアントがテーブル履歴を正しく解釈できるようにする、保護されたチェックポイントのセットを作成します。
- テーブル プロトコルにライター テーブル機能
checkpointProtectionを追加します。 - テーブル プロトコルを、残りのすべてのテーブル機能をサポートする最小のリーダーおよびライター バージョンにダウングレードします。 可能 な限り低いプロトコルを参照してください。
checkpointProtection テーブル機能とは
機能を削除すると、Delta Lake は、プロトコルのダウングレードを考慮して、テーブルの履歴のデータとメタデータを保護されたチェックポイントとして書き換えます。 ダウングレード後は、より多くのリーダー クライアントがテーブルを常に読み取り可能にする必要があります。 これは、テーブルのプロトコルに、削除された機能のサポートがテーブルを読み取るために必要なくなったことが反映されるためです。 保護されたチェックポイントと checkpointProtection 機能により、次の処理が実行されます。
- 削除されたテーブル機能を理解しているリーダー クライアントは、使用可能なすべてのテーブル履歴にアクセスできます。
- 削除されたテーブル機能をサポートしていないリーダー クライアントは、プロトコルのダウングレード バージョンから始まるテーブル履歴を読み取るだけで済みます。
- ライター クライアントは、プロトコルのダウングレード前にチェックポイントを書き換えません。
- テーブルのメンテナンス操作では、プロトコルのダウングレード チェックポイントを保護済みとしてマークする、
checkpointProtectionによって設定された要件が考慮されます。
各 DROP FEATURE コマンドで削除できるテーブル 機能は 1 つだけですが、テーブルの履歴に複数の保護されたチェックポイントと削除された機能を含めることができます。
Databricks ランタイムのすべてのバージョンでは、checkpointProtection テーブル機能がサポートされています。つまり、このテーブル機能は、Azure Databricksの読み取りまたは書き込みをブロックしません。
テーブル機能 checkpointProtection は、OSS Delta Lake クライアントからの読み取り専用アクセスをブロックしないでください。 テーブルを完全にダウングレードし、 checkpointProtection テーブル機能を削除するには、 TRUNCATE HISTORYを使用する必要があります。 Databricks では、 checkpointProtectionをサポートしていない外部 Delta クライアントを含むテーブルに書き込む必要がある場合にのみ、このパターンを使用することをお勧めします。
レガシ クライアントのテーブル プロトコルを完全にダウングレードするを参照してください。
削除可能な Delta テーブルの機能は何ですか?
次の Delta テーブル機能を削除できます。
-
catalogManagedカタログのコミットを参照してください。 -
checkConstraintsAzure Databricksの制約について参照してください。 -
collations-preview「Delta Lake での照合順序のサポート」を参照してください。 -
columnMapping「Delta Lake 列マッピングを使用して列の名前を変更および削除する」を参照してください。 -
deletionVectorsDatabricks の削除ベクトルを参照してください。 -
typeWidening「タイプ拡張」を参照してください。 -
v2Checkpoint「 クラシックにダウングレードする」を参照してください。 -
checkpointProtectioncheckpointProtectionテーブルの機能を参照してください。
他の デルタ テーブル機能を削除することはできません。
重要
テーブルから列マッピングを削除しても、パーティション テーブルのディレクトリ名で使用されるランダムなプレフィックスは削除されません。 「Delta Lake と Parquet のパーティション分割戦略の共有」について参照してください。
一部の Delta Lake 機能では、複数のテーブル機能が有効になります。 一部のテーブル フィーチャは他のテーブル フィーチャに依存し、依存テーブル フィーチャの削除がブロックされる場合があります。 一部のテーブル フィーチャは削除できないため、一部の Delta Lake 機能の有効化をロールバックできないことを意味します。
Databricks では、運用データのリーダーまたはライター プロトコルをアップグレードする機能を有効にする前に、新しい機能との互換性のために依存ワークロードとシステムを常にテストすることをお勧めします。
レガシ クライアントのテーブル プロトコルを完全にダウングレードする
外部 Delta Lake クライアントとの統合で、 checkpointProtection テーブル機能をサポートしていない書き込みが必要な場合は、 TRUNCATE HISTORY を使用して、無効になっているテーブル機能のすべてのトレースを完全に削除し、テーブル プロトコルを完全にダウングレードする必要があります。
Databricks では、DROP FEATUREに進む前に、TRUNCATE HISTORYの既定の動作をテストすることをお勧めします。
TRUNCATE HISTORYを実行すると、24 時間を超えるすべてのテーブル履歴が削除されます。
テーブルの完全なダウングレードは、少なくとも 24 時間間隔で実行する必要がある 2 つの手順で行われます。
手順 1: テーブル機能を削除する準備をする
第 1 段階では、ユーザーはテーブル機能を削除する準備をします。 この段階で起こることを次に説明します。
-
ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORYコマンドを実行します。 - テーブル機能を明示的に有効にするテーブル プロパティには、機能を無効にするための値が設定されています。
- 削除された機能に関連付けられた動作を制御するテーブル プロパティには、機能が導入される前に既定値に設定されたオプションがあります。
- 必要に応じて、更新されたテーブル プロパティを適用してデータ ファイルとメタデータ ファイルが書き換えられます。
- コマンドの実行が完了し、機能の削除を続けるには 24 時間待機する必要があることをユーザーに通知するエラー メッセージが返されます。
最初に機能を無効にした後は、プロトコルのダウングレードを完了する前にターゲット テーブルへの書き込みを続行できますが、削除するテーブル機能は使用できません。
注
テーブルをこの状態のままにした場合、テーブルに対する操作でテーブル機能は使用されませんが、プロトコルはテーブル機能を引き続きサポートします。 ダウングレードの最後のステップを完了するまで、テーブル機能を理解しない Delta クライアントによるテーブルの読み取りはできません。
手順 2: プロトコルをダウングレードしてテーブル機能を削除する
機能に関連付けられているすべてのトランザクション履歴を完全に削除し、プロトコルをダウングレードするには:
- 少なくとも 24 時間が経過したら、
ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORYコマンドを実行します。 - クライアントは、指定された保持しきい値に含まれるトランザクションでテーブル機能が使用されていないことを確認し、テーブル履歴をそのしきい値に切り捨てます。
- テーブル機能は、プロトコルのダウングレード中に削除されます。
- テーブルに存在するテーブルの特徴を下位のプロトコル バージョンで表すことができる場合、テーブルの
minReaderVersionとminWriterVersionは、Delta テーブルで使用されている残りの機能をサポートする最小バージョンにダウングレードされます。
重要
ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY を実行すると、24 時間以上前のすべてのトランザクション ログ データが削除されます。 このコマンドを使用してテーブル プロトコルをダウングレードした後は、テーブル履歴やタイム トラベルにアクセスできません。
Delta Lake の機能の互換性とプロトコルに関する記事を参照してください。