什麼是刪除向量?
刪除向量是您可以在 Delta Lake 資料表上啟用的記憶體優化功能。 根據預設,刪除資料檔案中的單一資料列時,必須重寫包含記錄的整個 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 用戶端將無法讀取不支援刪除向量的數據表。 請參閱 Azure Databricks 如何管理 Delta Lake 功能相容性?。
在 Databricks Runtime 14.1 和更新版本中,您可以卸除刪除向量數據表功能,以啟用與其他 Delta 用戶端的相容性。 請參閱卸除 Delta 資料表功能。
將變更套用至 Parquet 資料檔
刪除向量會指出數據列變更為虛刪除,以邏輯方式修改 Delta Lake 資料表中現有的 Parquet 資料檔。 當下列其中一個事件造成數據檔重寫時,會實際套用這些變更:
OPTIMIZE
命令會在數據表上執行。- 自動壓縮會觸發使用刪除向量重寫數據檔。
REORG TABLE ... APPLY (PURGE)
會針對數據表執行。
與檔案壓縮相關的事件對於解析刪除向量中記錄的變更沒有嚴格的保證,如果目標數據檔不是檔案壓縮的候選專案,則刪除向量中記錄的一些變更可能無法套用。 REORG TABLE ... APPLY (PURGE)
重寫包含使用刪除向量所記錄之修改之記錄的所有數據檔。 請參閱 REORG 資料表。
注意
修改過的數據可能仍然存在於舊檔案中。 您可以執行 VACUUM 以實際刪除舊檔案。 REORG TABLE ... APPLY (PURGE)
當數據表完成時,會建立新版本的數據表。 此完成時間是您必須考慮的時間戳,才能 VACUUM
讓作業的保留閾值完全移除已刪除的檔案。 請參閱 使用真空移除未使用的數據檔。
與 Delta 用戶端的相容性
Azure Databricks 會使用刪除向量來為已啟用 Photon 的計算更新提供預測性 I/O。 請參閱 使用預測性 I/O 加速更新。
支援使用刪除向量進行讀取和寫入,會因用戶端而異。
下表表示啟用刪除向量讀取和寫入 Delta 資料表所需的用戶端版本,並指定哪些寫入作業使用刪除向量:
用戶端 | 寫入刪除向量 | 讀取刪除向量 |
---|---|---|
Databricks Runtime with Photon | 支援 MERGE 、 UPDATE 和 DELETE 使用 Databricks Runtime 12.2 LTS 和更新版本。 |
需要使用 Databricks Runtime 12.2 LTS 或更新版本。 |
沒有 Photon 的 Databricks 運行時間 | 支援 DELETE 使用 Databricks Runtime 12.2 LTS 和更新版本。 支援 UPDATE 使用 Databricks Runtime 14.1 和更新版本。 支援 MERGE 使用 Databricks Runtime 14.3 LTS 和更新版本。 |
需要使用 Databricks Runtime 12.2 LTS 或更新版本。 |
具有 OSS Delta Lake 的 OSS Apache Spark | 支援 DELETE 使用 OSS Delta 2.4.0 和更新版本。 支援 UPDATE 使用 OSS Delta 3.0.0 和更新版本。 |
需要 OSS Delta 2.3.0 或更新版本。 |
差異共用收件者 | 差異共享數據表不支援寫入 | Databricks:需要 DBR 14.1 或更新版本。 開放原始碼 Apache Spark:需要 delta-sharing-spark 3.1 或更新版本。 |
注意
如需其他 Delta 用戶端的支援,請參閱 OSS Delta Lake 整合檔。
限制
- UniForm 不支援刪除向量。
- 您無法使用 GENERATE 語句 ,為具有使用刪除向量之檔案的數據表產生指令清單檔。 若要產生指令清單,請先執行 REORG TABLE ...APPLY (PURGE) 語句 ,然後執行
GENERATE
語句。 您必須確定提交REORG
語句時,不會執行並行寫入作業。 - 您無法以累加方式產生已啟用刪除向量之數據表的指令清單檔(例如,藉由設定 table 屬性
delta.compatibility.symlinkFormatManifest.enabled=true
)。 - 如果您在具體化檢視或串流數據表上啟用刪除向量,並後續停用刪除向量,則未來無法使用刪除向量來寫入檢視或數據表,但不會移除現有的刪除向量。
- 在具體化檢視或串流數據表上啟用刪除向量之後,您無法降級數據表通訊協定。 啟用之後,即使您後續停用檢視或數據表上的刪除向量,也無法移除刪除向量的數據表功能。
- 您無法在具體化檢視或串流數據表上執行
REORG
,將刪除向量中記錄的變更認可到支援這些物件的 Parquet 資料檔。 由於這項限制,如果您必須保證完整刪除記錄(例如 GDPR 或 CCPA 合規性),請勿在具體化檢視或串流數據表上啟用刪除向量。