削除ベクトルは、テーブルの変更を高速化するストレージ最適化機能です。 既定では、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 メタストアに格納されている具体化されたビューとストリーミング テーブルでは、既定では有効になっていません。
ストリーミング テーブルや具体化されたビューなど、任意のテーブルまたはビューで削除ベクトルのサポートを手動で有効または削除するには、 enableDeletionVectors table プロパティを使用します。 テーブルの作成時または変更時にテーブルの削除ベクトルを有効にするには:
-- For Delta tables
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER ステートメントを使用して、具体化されたビューまたはストリーミング テーブルの削除ベクトルを有効または削除することはできません。
Iceberg テーブルの場合は、iceberg.enableDeletionVectorsの代わりにdelta.enableDeletionVectorsを使用します。
警告
削除ベクトルを有効にすると、Databricks によってテーブル プロトコルがアップグレードされます。 アップグレード後、削除ベクターをサポートしていないクライアントはテーブルを読み取ることはできません。 Delta Lake の機能の互換性とプロトコルに関する記事を参照してください。
Databricks Runtime 14.1 以降では、削除ベクター テーブル機能を削除して、他のクライアントとの互換性を有効にすることができます。 Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
Parquet データ ファイルに変更を適用する
削除ベクトルは、テーブル内の既存の Parquet データ ファイルを論理的に変更するソフトデリートとして、行に対する変更を示します。 これらの変更は、次のいずれかのイベントによってデータ ファイルが書き換えられるときに物理的に適用されます。
-
OPTIMIZEコマンドがテーブルに対して実行されます。 - 自動圧縮により、削除ベクトルを含むデータ ファイルの書き換えがトリガーされます。
-
REORG TABLE ... APPLY (PURGE)がテーブルに対して実行されます。
ファイル圧縮に関連するイベントには、削除ベクトルに記録された変更を解決するための厳密な保証はありません。 削除ベクトルに記録された一部の変更は、ターゲット データ ファイルがファイル圧縮の候補でない場合、物理的に適用されない可能性があります。
REORG TABLE ... APPLY (PURGE) は、削除ベクトルを使用して変更が記録されているレコードを含むすべてのデータ ファイルを書き換えます。
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値は、論理的に削除された行を含むファイルのみを処理するように操作を制限します。 大きなテーブルで、多くのファイルに論理的に削除された行が含まれておらず、かつテーブルに削除された列がない場合には、パフォーマンスが向上する可能性があります。
クライアントの互換性
Azure Databricks では、削除ベクターを使用して、Photon 対応コンピューティングの更新に対する予測 I/O を実現します。 「予測 I/O を使用して更新を高速化する」を参照してください。
読み取りと書き込みに削除ベクトルを使用するためのサポートは、クライアントによって異なります。
次の表は、削除ベクトルが有効になっているテーブルの読み取りと書き込みに必要なクライアント バージョンを示し、削除ベクトルを使用する書き込み操作を指定します。
| クライアント | 削除ベクトルを記述する | 削除ベクトルの読み取り |
|---|---|---|
| Photon を使用する Databricks Runtime | Databricks Runtime 12.2 LTS 以降を使用して、MERGE、UPDATE、DELETE をサポートします。 |
Databricks Runtime 12.2 LTS 以降が必要です。 |
| Photon非対応のDatabricks Runtime | Databricks Runtime 12.2 LTS 以降を使用して、DELETE をサポートします。 Databricks Runtime 14.1 以上を使用して、UPDATE をサポートします。 Databricks Runtime 14.3 LTS 以降を使用して、MERGE をサポートします。 |
Databricks Runtime 12.2 LTS 以降が必要です。 |
| OSS Apache Spark と OSS Delta Lake | OSS Delta 2.4.0 以上を使用して、DELETE をサポートします。 OSS Delta 3.0.0 以上を使用して、UPDATE をサポートします。 |
OSS Delta 2.3.0 以上が必要です。 |
| Delta Sharing の受信者 | Delta Sharing テーブルでは書き込みがサポートされていません。 | Databricks: Databricks Runtime 14.1 以降が必要です。 オープン ソースの Apache Spark: delta-sharing-spark 3.1 以降が必要です。 |
他のクライアントでのサポートについては、 OSS Delta Lake の統合に関するドキュメントを参照してください。
制限事項
- UniForm Iceberg v2 では、削除ベクターはサポートされていません。 Apache Iceberg v3 では、UniForm が有効になっているテーブルの削除ベクトルがサポートされています。 Apache Iceberg v3 機能の使用を参照してください。
-
GENERATE ステートメントを使用して、削除ベクトルを使用するファイルを含むテーブルのマニフェスト ファイルを生成することはできません。 マニフェストを生成するには、最初に REORG TABLE ...APPLY (PURGE) ステートメント を実行し、
GENERATEステートメントを実行します。REORGステートメントを送信するときに、同時書き込み操作が実行されていないことを確認する必要があります。 - 削除ベクトルが有効になっているテーブルのマニフェスト ファイルを段階的に生成することはできません (たとえば、table プロパティを
delta.compatibility.symlinkFormatManifest.enabled=true設定します)。 - 具体化されたビューまたはストリーミング テーブルで削除ベクトルを有効にした後で削除ベクトルを削除した場合、削除ベクトルはビューまたはテーブルへの今後の書き込みに適用されませんが、既存の削除ベクトルは残ります。
- 具体化されたビューまたはストリーミング テーブルで削除ベクトルを有効にした後、テーブル プロトコルをダウングレードすることはできません。 有効にした後、ビューまたはテーブルで削除ベクトルを無効にした場合でも、削除ベクターのテーブル機能を削除することはできません。