削除ベクトルとは
削除ベクトルは、Delta Lake テーブルで有効にできるストレージ最適化機能です。 既定では、データ ファイル内の 1 行が削除されると、そのレコードを含む Parquet ファイル全体を書き換える必要があります。 テーブルの削除ベクトルが有効になっている場合、DELETE
、UPDATE
、および MERGE
操作によって削除ベクトルが使用され、存在する行が削除済みまたは変更済みとしてマークされ、Parquet ファイルは書き換えられません。 テーブルの後続の読み取りでは、削除ベクトルによって示される削除を最新のテーブル バージョンに適用することで、現在のテーブルの状態が解決されます。
Databricks では、Databricks Runtime 14.3 LTS 以降を使用して、削除ベクターを含むテーブルを書き込んですべての最適化を使用することをお勧めします。 Databricks Runtime 12.2 LTS 以降では、削除ベクトルが有効であるテーブルを読み取ることができます。
Databricks Runtime 14.2 以降では、削除ベクトルを使用するテーブルで行レベルのコンカレンシーがサポートされます。 「行レベルのコンカレンシーでの書き込みの競合」を参照してください。
Note
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 クライアントはテーブルを読み取りできなくなります。 「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 以降を使用して、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 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 では、削除ベクトルはサポートされていません。
- GENERATE ステートメントを使用して削除ベクトルを使用するファイルを含むテーブルのマニフェスト ファイルを生成することはできません。 マニフェストを生成するには、最初に REORG TABLE ...APPLY (PURGE) ステートメント
GENERATE
ステートメントを実行します。REORG
ステートメントを送信するときに、同時書き込み操作が実行されていないことを確認する必要があります。 - 削除ベクトルが有効になっているテーブルのマニフェスト ファイルを段階的に生成することはできません (たとえば、table プロパティを
delta.compatibility.symlinkFormatManifest.enabled=true
設定します)。 - 具体化されたビューまたはストリーミング テーブルで削除ベクトルを有効にした後、削除ベクトルを無効にした場合、ビューまたはテーブルへの将来の書き込みでは削除ベクトルを使用できなくなりますが、既存の削除ベクターは削除されません。
- 具体化されたビューまたはストリーミング テーブルで削除ベクトルを有効にした後、テーブル プロトコルをダウングレードすることはできません。 有効にした後、ビューまたはテーブルで削除ベクトルを無効にした場合でも、削除ベクターのテーブル機能を削除することはできません。
- 具体化されたビューまたはストリーミング テーブルで
REORG
を実行して、削除ベクターに記録された変更を、これらのオブジェクトをバックアップする Parquet データ ファイルにコミットすることはできません。 この制限により、レコードの完全な削除を保証する必要がある場合は、具体化されたビューまたはストリーミング テーブルで削除ベクトルを有効にしないでください (たとえば、GDPR または CCPA コンプライアンスの場合)。