Databricksの削除ベクトル
削除ベクトルは、テーブルへの変更を高速化するストレージ最適化機能です。デフォルトでは、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 を使用して更新を高速化するを参照してください。
削除ベクトルを有効にする
ワークスペース管理者の設定により、新しいテーブルに対して削除ベクトルが自動的に有効になるかどうかが制御されます。「削除ベクトルの自動有効化」を参照してください。
削除ベクトルの自動有効化を制御するワークスペース設定を使用する場合、テーブルタイプで選択したオプションに基づいて、 SQLウェアハウスまたは Databricks Runtime 14.1以降を使用して新しいテーブルを作成すると、デフォルトによって削除ベクトルが有効になります。
削除ベクトルは、マテリアライズドビューとストリーミングテーブルが [ Hive metastoreに保存されている] のデフォルトでは有効になっていません。
任意のテーブルまたはビュー (ストリーミング テーブルやマテリアライズドビューを含む) での削除のサポートを手動で有効または無効にするには、 enableDeletionVectorsテーブル プロパティを使用します。 次の例のように、テーブルを作成または変更するときに、テーブルで削除ベクトルを有効にするかどうかを手動で選択します。ALTERステートメントを使用して、マテリアライズドビューまたはストリーミング テーブルで削除を有効または無効にすることはできません。
-- For Delta tables
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
-- For Iceberg tables, use iceberg.enableDeletionVectors instead of delta.enableDeletionVectors
削除ベクトルを有効にすると、テーブル プロトコルがアップグレードされます。アップグレード後、削除ベクトルをサポートしていないクライアントではテーブルを読み取ることができなくなります。Delta Lake 機能の互換性とプロトコルを参照してください。
Databricks Runtime 14.1 以降では、削除テーブル機能を削除して、他のクライアントとの互換性を有効にすることができます。 「Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレード」を参照してください。
Parquet データファイルに変更を適用する
削除ベクトルは、テーブル内の既存の Parquet データ ファイルを論理的に変更するソフト削除として行への変更を示します。これらの変更は、次のいずれかのイベントによってデータ ファイルが書き換えられるときに物理的に適用されます。
OPTIMIZEコマンドがテーブルで実行されます。- 自動圧縮は、削除ベクトルを使用してデータファイルの書き換えをトリガーします。
REORG TABLE ... APPLY (PURGE)はテーブルに対して実行されます。
ファイル圧縮に関連するイベントには、削除ベクトルに記録された変更の解決が厳密に保証されておらず、ターゲット データ ファイルがファイル圧縮の候補にならない場合、削除ベクトルに記録された一部の変更が適用されない可能性があります。 REORG TABLE ... APPLY (PURGE) は、削除ベクトルを使用して記録された変更が記録されたレコードを含むすべてのデータ ファイルを書き換えます。 REORG TABLE を参照してください。
変更されたデータが古いファイルにまだ存在している可能性があります。 vacuumを実行して、古いファイルを物理的に削除できます。REORG TABLE ... APPLY (PURGE) は、完了時に新しいバージョンのテーブルを作成します。 この完了時刻は、削除されたファイルを完全に削除するための VACUUM 操作の保持しきい値として考慮する必要があるタイムスタンプです。 「 vacuumを使用した未使用のデータファイルの削除」を参照してください。
クライアントの互換性
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に設定します)。 - マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にし、その後削除ベクトルを無効にした場合、ビューまたはテーブルへの今後の書き込みでは削除ベクトルを使用できなくなりますが、既存の削除ベクトルは削除されません。
- マテリアライズドビューまたはストリーミングテーブルで削除ベクトルを有効にした後で、テーブルプロトコルをダウングレードすることはできません。 有効化後は、削除ベクトルのテーブル機能は、後でビューまたはテーブルで削除ベクトルを無効にしても削除できません。