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