削除ベクトルとは

削除ベクトルは、Delta Lake テーブルで有効にできるストレージ最適化機能です。 既定では、データ ファイル内の 1 行が削除されると、そのレコードを含む Parquet ファイル全体を書き換える必要があります。 テーブルの削除ベクトルが有効になっている場合、DELETEUPDATE、および MERGE 操作によって削除ベクトルが使用され、存在する行が削除済みまたは変更済みとしてマークされ、Parquet ファイルは書き換えられません。 テーブルに対する後続の読み取りでは、削除ベクトルによって示されている削除を適用して、現在のテーブルの状態を最新のテーブル バージョンに解決します。

Databricks では、Databricks Runtime 14.3 LTS 以降を使用して、削除ベクトルを含むテーブルを記述し、すべての最適化を活用することをお勧めします。 Databricks Runtime 12.2 LTS 以降では、削除ベクトルが有効であるテーブルを読み取ることができます。

Databricks Runtime 14.2 以降では、削除ベクトルを使用するテーブルで行レベルのコンカレンシーがサポートされます。 「行レベルのコンカレンシーでの書き込みの競合」を参照してください。

Note

Photon は、予測 I/O 更新で削除ベクトルを利用し、DELETEMERGEUPDATE の各操作を高速化します。 削除ベクトルの読み取りをサポートするすべてのクライアントは、削除ベクトルを生成した更新を読み取ることができ、それらの更新が予測 I/O によって生成されたかどうかには関係ありません。 「予測 I/O を使用して更新を高速化する」を参照してください。

削除ベクトルを有効にする

削除ベクトルは、SQL ウェアハウスまたは Databricks Runtime 14.1 以上を使用して新しいテーブルを作成する際に、既定で有効になります。

重要

ワークスペース管理者設定では、新しい Delta テーブルに対して削除ベクトルを自動で有効にするかどうかをコントロールします。 「削除ベクトルの自動有効化」を参照してください。

Delta Lake テーブル プロパティを設定することで、Delta テーブル上の削除ベクトルのサポートを有効にすることができます。 次の例のように、テーブルの作成時に削除ベクトルを有効にするか、既存のテーブルを変更します。

CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);

警告

削除ベクトルを有効にすると、テーブル プロトコルがアップグレードされます。 アップグレード後、削除ベクトルをサポートしていない Delta Lake クライアントはテーブルを読み取りできなくなります。 「Azure Databricks で Delta Lake 機能の互換性を管理する方法は?」を参照してください。

Databricks Runtime 14.1 以降では、他の Delta クライアントとの互換性を有効にするため、削除ベクトル テーブル機能を削除できます。 「Delta テーブル機能の削除」を参照してください。

Parquet データ ファイルに変更を適用する

削除ベクトルは行に対する変更を論理的な削除として示し、これにより、Delta Lake テーブル内に存在する Parquet データ ファイルが論理的に変更されます。 これらの変更が物理的に適用されるのは、次のいずれかのイベントによってトリガーされてデータ ファイルが書き換えられるときです。

  • OPTIMIZE コマンドがテーブルに対して実行されます。
  • 自動圧縮により、削除ベクトルを含むデータ ファイルの書き換えがトリガーされます。
  • REORG TABLE ... APPLY (PURGE) がテーブルに対して実行されます。

ファイル圧縮に関連するイベントでは、削除ベクトルに記録された変更の解決について厳密な保証がありません。また、ターゲット データ ファイルがファイル圧縮の候補にならない場合は、削除ベクトルに記録された一部の変更が適用されない可能性があります。 REORG TABLE ... APPLY (PURGE) は、削除ベクトルを使用して変更が記録されているレコードを含むすべてのデータ ファイルを書き換えます。 「REORG TABLE」を参照してください。

Note

変更されたデータが、古いファイルに引き続き存在する可能性があります。 VACUUM を実行して、古いファイルを物理的に削除できます。 REORG TABLE ... APPLY (PURGE) によって、完了時にテーブルの新しいバージョンが作成されます。VACUUM 操作によって削除済みファイルが完全に削除されるようにするには、保持しきい値でこのタイムスタンプを考慮する必要があります。 「VACUUM を使用して未使用のデータ ファイルを削除する」を参照してください。

Delta クライアントとの互換性

Azure Databricks では、削除ベクトルを活用して、Photon 対応コンピューティングの更新に対する予測 I/O を動作させます。 「予測 I/O を使用して更新を高速化する」を参照してください。

読み取りと書き込みの削除ベクトル活用についてのサポートは、クライアントによって異なります。

次の表は、削除ベクトルが有効になっている Delta テーブルの、読み取りと書き込みに必要なクライアント バージョンと、どの書き込み操作が削除ベクトルを活用するのかを示しています。

クライアント 削除ベクトルの書き込み 削除ベクトルの読み取り
Photon を使用する Databricks Runtime Databricks Runtime 12.2 LTS 以降を使用して、MERGEUPDATEDELETE をサポートします。 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 Delta Lake を使用する OSS Apache Spark OSS Delta 2.4.0 以上を使用して、DELETE をサポートします。 OSS Delta 3.0.0 以上を使用して、UPDATE をサポートします。 OSS Delta 2.3.0 以上が必要です。
Delta Sharing の受信者 Delta Sharing テーブルに対する書き込みはサポートされません Databricks: DBR 14.1 以上が必要です。 オープン ソースの Apache Spark: delta-sharing-spark 3.1 以上が必要です。

Note

他の Delta クライアントでのサポートについては、「OSS Delta Lake 統合のドキュメント」を参照してください。

制限事項

  • UniForm では、削除ベクトルはサポートされていません。
  • 具体化されたビューの削除ベクトルを有効にすることはできますが、具体化されたビューの削除ベクトルを無効にするには、その具体化されたビューをドロップして再作成する必要があります。
  • 削除ベクトルが存在するテーブルのマニフェスト ファイルを生成することはできません。 マニフェストを生成するには、REORG TABLE ... APPLY (PURGE) を実行し、同時書き込み操作が実行されていないことを確認します。
  • 削除ベクトルが有効なテーブルのマニフェスト ファイルを増分生成することはできません。