什麼是刪除向量?
刪除向量是可在 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 加速更新。
啟用刪除向量
使用 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 用戶端的相容性。 請參閱 卸除差異數據表功能。
將變更套用至 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 不支援刪除向量。
- 您可以啟用具體化檢視的刪除向量,但若要停用具體化檢視的刪除向量,您必須卸除具體化檢視並重新建立它。
- 您無法為存在刪除向量之資料表產生指令清單檔。 若要產生指令清單,請執行
REORG TABLE ... APPLY (PURGE)
並確定沒有任何並行寫入作業正在執行。 - 您無法以累加方式產生已啟用刪除向量之資料表的指令清單檔。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應