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

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

この記事では、Delta Lake テーブル機能の削除およびプロトコル バージョンのダウングレードについて説明します。

この機能は、Databricks Runtime 16.3 以降で使用できます。すべての Delta Lake テーブルの機能を削除できるわけではありません。ドロップできるDelta Lake テーブル機能を参照してください。

DROP FEATUREは、以前のDatabricks Runtimeバージョン、OpenSharing、または外部のDelta Lakeリーダー/ライタークライアントとの互換性をサポートするためにのみ使用してください。

注記

DROP FEATURE のレガシ サポートは、Databricks Runtime 14.3 LTS 以降で使用できます。Databricks では、すべての DROP FEATURE コマンドに Databricks Runtime 16.3 以降を使用することをお勧めします。これにより、従来の動作が置き換えられます。従来の機能のドキュメントについては、Delta テーブル機能のドロップ (レガシー)」を参照してください。

Delta Lake 機能の削除

次の構文を使用すると、テーブル機能を削除できます。

SQL
ALTER TABLE <table-name> DROP FEATURE <feature-name>

Databricks Runtime 16.3 以降を使用し、ターゲットの Delta Lake テーブルに対して MODIFY の権限が必要です。各 DROP FEATURE コマンドで、1つのテーブルフィーチャーのみをドロップできます。

詳細については、ALTER TABLEを参照してください。

重要

すべての DROP FEATURE オペレーションは、すべての並列書き込み操作と競合します。

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

テーブル機能がドロップされた場合はどうなりますか?

テーブル機能を削除すると、Delta Lake はテーブルへの変更をアトミックにコミットし、次のことを行います:

  • テーブル機能を使用するテーブルプロパティを無効にします。
  • 現在のバージョンのテーブルのデータファイルからテーブル機能のすべての痕跡を削除するために、必要に応じてデータファイルを書き換えます。
  • リーダー クライアントがテーブル履歴を正しく解釈できるようにする保護されたチェックポイントのセットを作成します。
  • テーブルプロトコルにライターテーブル機能 checkpointProtection を追加します。
  • テーブル・プロトコルを、残りのすべてのテーブル機能をサポートする最も低いリーダーおよびライター・バージョンにダウングレードします。可能な限り低いプロトコルを参照してください。

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

機能を削除すると、Delta Lake はデータとメタデータをテーブルの履歴に保護されたチェックポイントとして書き換え、プロトコルのダウングレードを尊重します。ダウングレード後、テーブルはより多くのリーダークライアントから常に読み取れるようになるはずです。これは、テーブルのプロトコルが、テーブルを読み取る際に、削除された機能のサポートがもはや不要であることを示すようになったためです。保護されたチェックポイントと checkpointProtection 機能は、次のことを達成します。

  • 削除されたテーブル機能を理解できる Reader クライアントは、利用可能なすべてのテーブル履歴にアクセスできます。
  • 削除されたテーブル機能をサポートしないリーダークライアントは、プロトコルダウングレードバージョン以降のテーブル履歴を読み取るだけで十分です。
  • 書き込みクライアントはプロトコルのダウングレードより前にチェックポイントを書き換えません。
  • テーブルのメンテナンス操作は、プロトコルのダウングレードチェックポイントを保護対象としてマークするcheckpointProtectionによって設定された要件に従います。

それぞれのDROP FEATUREコマンドで1つのテーブル機能しか削除できませんが、テーブル履歴には、複数の保護されたチェックポイントや削除された機能を持つことができます。

すべてのDatabricks Runtimeバージョンは、checkpointProtectionテーブル機能をサポートしており、このテーブル機能がDatabricksでの読み取りや書き込みをブロックすることはありません。

テーブル機能 checkpointProtection は、OSS Delta Lake クライアントからの読み取り専用アクセスをブロックしてはなりません。テーブルを完全にダウングレードし、checkpointProtection テーブル機能を削除するには、TRUNCATE HISTORY を使用する必要があります。Databricks では、checkpointProtection をサポートしない外部 Delta クライアントを使用するテーブルにのみ書き込む必要がある場合に、このパターンを使用することをお勧めします。レガシー クライアント向けテーブル プロトコルの完全なダウングレードを参照してください。

ドロップできるDelta Lakeテーブル機能

次の Delta Lake テーブル機能を削除できます:

他のDelta Lake テーブル機能は削除できません。

重要

テーブルからカラムマッピングを解除しても、パーティションテーブルのディレクトリ名に使用されているランダムなプレフィックスは削除されません。「Delta Lake と Parquet はパーティション分割戦略を共有しますか?」を参照してください。

Delta Lakeの一部の機能により、複数のテーブル機能が有効になります。一部のテーブル機能は他のテーブル機能に依存しており、依存するテーブル機能の削除を妨げる可能性があります。一部のテーブル機能はドロップできないため、一部の Delta Lake 機能は、一度有効にするとロールバックできません。

Databricks は、本番運用データに対してリーダーまたはライターのプロトコルをアップグレードする機能を有効にする前に、依存するワークロードとシステムを常に新しい機能との互換性についてテストすることを推奨します。

レガシー クライアント向けにテーブルプロトコルを完全にダウングレード

外部のDelta Lakeクライアントとの統合で、checkpointProtectionテーブル機能に対応していない書き込みが必要な場合、無効化されたテーブル機能のすべての痕跡を完全に削除し、テーブルプロトコルを完全にダウングレードするためにTRUNCATE HISTORYを使用する必要があります。

Databricks では、TRUNCATE HISTORY を進める前に、DROP FEATURE のデフォルトの動作をテストすることをお勧めします。TRUNCATE HISTORYを実行すると、24時間より古いすべてのテーブル履歴が削除されます。

完全なテーブルダウングレードは、少なくとも24時間の間隔を空けて実行する必要がある2つのステップで発生します。

ステップ1:テーブル機能の削除を準備する

最初の段階で、テーブル機能の削除の準備をします。次に、この段階で発生することについて説明します。

  1. ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY コマンドを実行します。
  2. 特定のテーブル機能を有効にするためのテーブルプロパティには、その機能を無効にする値が設定されています。
  3. 機能が導入される前は、削除された機能に関連する動作を制御するテーブルプロパティのオプションがデフォルト値に設定されていました。
  4. 必要に応じて、データファイルとメタデータファイルは更新されたテーブルプロパティに従って書き換えられます。
  5. コマンドの実行が終了し、機能の削除を進めるには24時間待機する必要がある旨のエラーメッセージが返されます。

最初に機能を無効にした後、プロトコルのダウングレードを完了する前にターゲットテーブルへの書き込みを継続できますが、削除しているテーブル機能は使用できません。

注記

テーブルをこの状態のままにしておくと、テーブルに対する操作ではテーブル機能は使用されませんが、プロトコルは引き続きテーブル機能をサポートします。最後のダウングレードのステップを完了するまで、そのテーブルは、テーブル機能を理解できないDeltaクライアントからは読み取れません。

ステップ2: プロトコルをダウングレードし、テーブル機能を削除する

機能に関連付けられているすべてのトランザクション履歴を完全に削除し、プロトコルをダウングレードするには、

  1. 少なくとも24時間経過後、ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY コマンドを実行します。
  2. クライアントは、指定された保持しきい値内でテーブル機能を使用するトランザクションがないことを確認し、その後、テーブル履歴をそのしきい値まで切り捨てます。
  3. プロトコルのダウングレード中にテーブル機能は削除されます。
  4. テーブルに含まれるテーブル機能がより低いプロトコルバージョンで表現できる場合、テーブルの minReaderVersionminWriterVersion は、Delta Lake テーブルで使用されている残りの機能をサポートする最も低いバージョンにダウングレードされます。
重要

ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY を実行すると、24時間以上経過したすべてのトランザクションログデータが削除されます。このコマンドを使用してテーブルプロトコルをダウングレードした後、テーブル履歴またはタイムトラベルにアクセスできません。

Delta Lake 機能の互換性とプロトコルを参照してください。