削除ベクトルとは何ですか?
削除ベクトルは、Delta Lake テーブルで有効にできるストレージ最適化機能です。 デフォルトでは、データファイルの 1 行が削除されると、レコードを含む Parquet ファイル全体を書き換える必要があります。 テーブルで削除ベクトルを有効にすると、 DELETE
、 UPDATE
、および MERGE
操作では、削除ベクトルを使用して、Parquet ファイルを書き換えることなく、既存の行を削除済みまたは変更済みとしてマークします。 テーブルに対する後続の読み取りでは、削除ベクトルで示された削除を最新のテーブルバージョンに適用することで、現在のテーブルの状態が解決されます。
Databricks では、Databricks Runtime 14.3 LTS 以降を使用して、すべての最適化を使用するために削除ベクトルを含むテーブルを書き込むことをお勧めします。 Databricks Runtime 12.2 LTS 以降では、削除ベクトルが有効になっているテーブルを読み取ることができます。
Databricks Runtime 14.2 以降では、削除ベクトルを含むテーブルで行レベルのコンカレンシーがサポートされています。 「行レベルの同時実行性との書き込みの競合」を参照してください。
注
Photonは、予測的なI/O更新のために削除ベクトルを活用し、 DELETE
、 MERGE
、および UPDATE
操作を高速化します。 削除ベクトルの読み取りをサポートするすべてのクライアントは、予測 I/O がこれらの更新を生成したかどうかに関係なく、削除ベクトルを生成した更新を読み取ることができます。 「予測 I/O を使用して更新を高速化する」を参照してください。
削除ベクトルを有効にする
重要
ワークスペース管理者設定は、新しい Delta テーブルに対して削除ベクトルが自動的に有効になるかどうかを制御します。 「削除ベクトルの自動有効化」を参照してください。
削除ベクトルの自動有効化を制御するワークスペース設定を使用する場合、テーブルタイプで選択したオプションに基づいて、 SQLウェアハウスまたは Databricks Runtime 14.1以降を使用して新しいテーブルを作成すると、デフォルトによって削除ベクトルが有効になります。 削除ベクトルは、マテリアライズドビューまたはストリーミングテーブルを作成するときにはデフォルトでは有効に ならず 、マテリアライズドビューまたはストリーミングテーブルを作成するときに手動で有効にする必要があります。
テーブルまたはビューでの削除ベクトルのサポートを手動で有効にするには、 delta.enableDeletionVectors
table プロパティを使用します。 デルタテーブルで削除ベクトルは、テーブルを作成または変更するときに手動で有効にできます。 マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを手動で有効にできるのは、マテリアライズドビューまたはストリーミングテーブルを作成するときだけです。 ALTER
ステートメントを使用して、マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にすることはできません。
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
警告
削除ベクトルを有効にすると、テーブルプロトコルがアップグレードされます。 アップグレード後、削除ベクトルをサポートしていない Delta Lake クライアントではテーブルを読み取ることができなくなります。 「Databricks が Delta Lake 機能の互換性を管理する方法」を参照してください。
Databricks Runtime 14.1 以降では、削除ベクトル テーブル機能を削除して、他の Delta クライアントとの互換性を有効にすることができます。「ドロップ Delta テーブル フィーチャ」をご参照ください。
Parquet データファイルへの変更の適用
削除ベクトルは、行への変更を、Delta Lake テーブル内の既存の Parquet データ ファイルを論理的に変更する論理的な削除として示します。 これらの変更は、次のいずれかのイベントによってデータ ファイルが書き換えられたときに物理的に適用されます。
テーブルに対して
OPTIMIZE
コマンドが実行されます。自動圧縮は、削除ベクトルを使用してデータ ファイルの書き換えをトリガーします。
REORG TABLE ... APPLY (PURGE)
テーブルに対して実行されます。
ファイル圧縮に関連するイベントには、削除ベクトルに記録された変更を解決するための厳密な保証はなく、ターゲットデータファイルがファイル圧縮の候補にならない場合、削除ベクトルに記録された一部の変更は適用されない可能性があります。 REORG TABLE ... APPLY (PURGE)
は、削除ベクトルを使用して記録された変更を含むレコードを含むすべてのデータファイルを書き換えます。 再編成表を参照してください。
注
変更されたデータが古いファイルにまだ存在している可能性があります。 VACUUMを実行して、古いファイルを物理的に削除できます。REORG TABLE ... APPLY (PURGE)
は、完了時に新しいバージョンのテーブルを作成します。 この完了時刻は、削除されたファイルを完全に削除するための VACUUM
操作の保持しきい値として考慮する必要があるタイムスタンプです。 「バキュームによる未使用のデータファイルの削除」を参照してください。
Deltaクライアントとの互換性
Databricks は、削除ベクトルを使用して、Photon対応コンピュートの更新のための予測I/Oを強化します。 「予測 I/O を使用して更新を高速化する」を参照してください。
読み取りと書き込みに削除ベクトルを使用できるかどうかは、クライアントによって異なります。
次の表は、削除ベクトルが有効になっている Delta テーブルの読み取りと書き込みに必要なクライアント バージョンを示し、削除ベクトルを使用する書き込み操作を指定します。
クライアント |
削除ベクトルの書き込み |
読み取り削除ベクトル |
---|---|---|
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: DBR 14.1 以降が必要です。 オープンソースのApache Spark: |
注
他の Delta クライアントでのサポートについては、 OSS Delta Lake 統合のドキュメントを参照してください。
制限
UniForm は削除ベクトルをサポートしていません。
GENERATE ステートメントを使用して、削除ベクトルを使用するファイルを持つテーブルのマニフェスト・ファイルを生成することはできません。マニフェストを生成するには、まず REORG TABLE ...APPLY (PURGE) ステートメント を実行し、
GENERATE
ステートメントを実行します。REORG
ステートメントを送信するときは、並列書き込み操作が実行されていないことを確認する必要があります。削除ベクトルが有効になっているテーブルのマニフェスト ファイルを増分生成することはできません (たとえば、テーブル プロパティを
delta.compatibility.symlinkFormatManifest.enabled=true
に設定します)。マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にし、その後削除ベクトルを無効にした場合、ビューまたはテーブルへの今後の書き込みでは削除ベクトルを使用できなくなりますが、既存の削除ベクトルは削除されません。
マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にした後で、テーブルプロトコルをダウングレードすることはできません。 有効化後は、削除ベクトルのテーブル機能は、後でビューまたはテーブルで削除ベクトルを無効にしても削除できません。
マテリアライズドビューまたはストリーミングテーブルで
REORG
を実行して、削除ベクトルに記録された変更をこれらのオブジェクトをサポートする Parquet データファイルにコミットすることはできません。 この制限のため、レコードの完全な削除を保証する必要がある場合 (GDPR や CCPA コンプライアンスなど) は、マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にしないでください。