Databricksの削除ベクトル
削除ベクトルは、テーブルへの変更を高速化するストレージ最適化機能です。デフォルトでは、1 行を削除すると、そのレコードを含む Parquet ファイル全体を書き換える必要があります。削除ベクトルはこのオーバーヘッドを回避します。削除ベクトルが有効になっている場合、 DELETE 、 UPDATE 、およびMERGE操作は、Parquet ファイルを書き換えずに行を変更済みとしてマークします。次に読み取りは、削除ベクトルに記録された変更を適用して、現在のテーブル状態を解決します。
Databricksは、すべての最適化を活用するために、削除ベクトルを含むテーブルを書き込む際には、Databricks Runtime 14.3 LTS以降を使用することを推奨しています。削除ベクトルが有効になっているテーブルを読み込むには、Databricks Runtime 12.2 LTS以降を使用してください。
Databricks Runtime 14.2 以降では、削除を備えたテーブルが行レベルの同時実行をサポートします。 行レベルの同時実行性を参照してください。
予測的なI/O更新の場合、Photonは削除ベクトルを使用してDELETE 、 MERGE 、およびUPDATE操作を高速化します。更新を高速化するには、予測型I/Oの使用を参照してください。
削除ベクトルを有効にする
ワークスペース設定では、SQLウェアハウスまたはDatabricks Runtime 14.3 LTS以降を使用している場合、新しいテーブルで削除ベクトルを有効にすることができます。デフォルト設定は地域によって異なります。削除ベクトルの自動有効化を参照してください。
削除ベクトルは、マテリアライズドビューとストリーミングテーブルが [ Hive metastoreに保存されている] のデフォルトでは有効になっていません。
ストリーミング テーブルやマテリアライズドビューなどのテーブルまたはビューの削除サポートを手動で有効または削除するには、 enableDeletionVectorsテーブル プロパティを使用します。 テーブルの作成時または変更時に、テーブル上で削除ベクトルを有効にするには:
-- For Delta tables
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTERステートメントを使用して、マテリアライズドビューまたはストリーミング テーブルの削除を有効にしたり削除したりすることはできません。
Iceberg テーブルの場合は、 delta.enableDeletionVectorsの代わりにiceberg.enableDeletionVectorsを使用してください。
削除ベクトルを有効にすると、Databricksはテーブルプロトコルをアップグレードします。アップグレード後、削除ベクトルをサポートしていないクライアントはテーブルを読み取ることができません。Delta Lakeの機能互換性とプロトコルを参照してください。
Databricks Runtime 14.1 以降では、削除テーブル機能を削除して、他のクライアントとの互換性を有効にすることができます。 「Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレード」を参照してください。
Parquet データファイルに変更を適用する
削除ベクトルは、テーブル内の既存の Parquet データ ファイルを論理的に変更するソフト削除として行への変更を示します。これらの変更は、次のいずれかのイベントによってデータ ファイルが書き換えられるときに物理的に適用されます。
OPTIMIZEコマンドがテーブルで実行されます。- 自動圧縮は、削除ベクトルを使用してデータファイルの書き換えをトリガーします。
REORG TABLE ... APPLY (PURGE)はテーブルに対して実行されます。
ファイル圧縮に関連するイベントは、削除ベクトルに記録された変更を解決するための厳密な保証を提供しません。削除ベクトルに記録された変更の一部は、対象データファイルがファイル圧縮の対象でない場合、物理的に適用されない可能性があります。REORG TABLE ... APPLY (PURGE)削除ベクトルを使用して記録された変更を含むレコードを含むすべてのデータファイルを書き換えます。See REORG TABLE.
古いデータを物理的に削除する
パージ操作後も、テーブルの古いデータファイルには変更されたデータが残っている可能性があります。例えば、クラウドプロバイダーのストレージコストを削減するため、あるいはGDPR(一般データ保護規則)の要求に対応するために、データを物理的に削除したい場合もあるでしょう。
VACUUMを実行して古いファイルを物理的に削除します。REORG TABLE ... APPLY (PURGE)操作は、完了時にテーブルの新しいバージョンを作成します。以前のテーブルバージョンから削除されたファイルを完全に削除するには、 VACUUMの保持しきい値をパージ操作の完了タイムスタンプに設定する必要があります。メタデータのみの削除をパージしてデータの書き換えを強制するを参照してください。
大規模テーブルのパフォーマンスを向上させる
大規模テーブルでソフト削除されたデータを削除する際のパフォーマンスを向上させるには、 spark.databricks.delta.reorg.purgeModeをrowsに設定します。例えば、 REORG TABLE ... APPLY (PURGE)を使用してデータを手動で削除する場合、またはALTER TABLE DROP FEATURE deletionVectorsを使用して削除ベクトルを削除する場合に、この設定を行います。
デフォルトでは、 spark.databricks.delta.reorg.purgeModeはallに設定されます。大規模なテーブルの場合、パージ操作では、削除された列データとソフト削除された行の両方を確認するために、すべての Parquet ファイルのフッターをスキャンする必要があるため、この操作は遅くなる可能性があります。
rows値は、ソフト削除された行を含むファイルのみを処理するように操作を制限します。大規模なテーブルの場合、多くのファイルにソフト削除された行が含まれておらず、テーブルに削除された列がない場合、この方法はパフォーマンスを向上させる可能性があります。
クライアントの互換性
Databricks は、削除ベクトルを使用して、Photon対応コンピュートの更新のための予測I/Oを強化します。 予測 I/O を使用して更新を高速化するを参照してください。
読み取りと書き込みに削除ベクトルを使用できるかどうかは、クライアントによって異なります。
次の表は、削除を有効にしたテーブルの読み取りと書き込みに必要なクライアントのバージョンを示し、どの書き込み操作が削除を使用するかを示しています。
クライアント | 削除ベクトルの書き込み | 削除ベクトルの読み取り |
|---|---|---|
Databricks Runtime と Photon | Databricks Runtime 12.2 LTS 以降を使用した | Databricks Runtime 12.2 LTS 以上が必要です。 |
Photon を使用しない Databricks Runtime | Databricks Runtime 12.2 LTS 以降を使用した | Databricks Runtime 12.2 LTS 以上が必要です。 |
OSS Apache Spark と OSS Delta Lake | OSS Delta 2.4.0 以降の | OSS Delta 2.3.0 以降が必要です。 |
Delta Sharing の受信者 | Delta Sharingテーブルでは書き込みはサポートされていません。 | Databricks: Databricks Runtime 14.1 以上が必要です。オープンソースの Apache Spark: |
他のクライアントのサポートについては、 OSS Delta Lake 統合ドキュメントを参照してください。
制限
- UniForm Iceberg v2 は削除をサポートしていません。 Apache Iceberg v3 は、UniForm が有効になっているテーブル上の削除ベクトルをサポートします。「Apache Iceberg v3 機能の使用」を参照してください。
- GENERATE ステートメントを使用して、削除ベクトルを使用するファイルを持つテーブルのマニフェスト・ファイルを生成することはできません。マニフェストを生成するには、まず REORG TABLE ...APPLY (PURGE) ステートメント を実行し、
GENERATEステートメントを実行します。REORGステートメントを送信するときは、並列書き込み操作が実行されていないことを確認する必要があります。 - 削除ベクトルが有効になっているテーブルのマニフェスト ファイルを増分生成することはできません (たとえば、テーブル プロパティを
delta.compatibility.symlinkFormatManifest.enabled=trueに設定します)。 - マテリアライズドビューまたはストリーミング テーブルで削除を有効にしてから削除した場合、削除はビューまたはテーブルへの今後の書き込みには適用されませんが、既存の削除は残ります。
- マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にした後で、テーブルプロトコルをダウングレードすることはできません。 有効化後は、削除ベクトルのテーブル機能は、後でビューまたはテーブルで削除ベクトルを無効にしても削除できません。