真空
適用於:Databricks SQL Databricks Runtime
從資料表目錄移除未使用的檔案。
注意
此命令的運作方式會因您使用的是 Delta 或 Apache Spark 資料表而有所不同。
清理 Delta 資料表
以遞歸方式清理與 Delta 數據表相關聯的目錄。 如需完整詳細數據和限制,請參閱 使用真空移除未使用的數據檔。
VACUUM
從數據表目錄中移除不是由 Delta 管理的所有檔案,以及不再處於數據表事務歷史記錄最新狀態且早於保留閾值的數據檔。
VACUUM
會略過以底線 (_
) 開頭的所有目錄,其中包含 _delta_log
。 在以底線開頭的數據行上分割數據表,是此規則的例外狀況; VACUUM
會掃描目標 Delta 資料表中包含的所有有效分割區。 差異數據表數據檔會根據在邏輯上從 Delta 事務歷史記錄中移除的時間加上保留時數而刪除,而不是其在記憶體系統上的修改時間戳。 預設閾值為 7 天。
在 Delta 數據表上,Azure Databricks 不會 自動觸發 VACUUM
作業。
如果您在 Delta 資料表上執行VACUUM
,就會失去時間回到比指定數據保留期間還舊的版本的能力。
警告
建議您將保留間隔設定為至少 7 天,因為舊的快照集和未認可的檔案仍可供數據表的並行讀取器或寫入器使用。 如果 VACUUM
清除使用中檔案,並行讀取器可能會失敗,或者更糟的是,刪除尚未認可的檔案時 VACUUM
,數據表可能會損毀。 您必須選擇超過執行中最長並行交易的間隔,以及任何資料流程可以延遲至資料表最新更新的最長期間。
Delta Lake 有安全檢查,以防止您執行危險的 VACUUM
命令。 在 Databricks Runtime 中,您確定此資料表上不會執行比您打算指定的保留間隔更久的作業,您可以將 Spark 組態屬性 spark.databricks.delta.retentionDurationCheck.enabled
設定為 false
來關閉此安全性檢查。
VACUUM table_name { { FULL | LITE } | RETAIN num HOURS | DRY RUN } [...]
在 Databricks Runtime 16.0 和更早版本中,語法中 RETAIN num HOURS
必須在 DRY RUN
之前。
重要
VACUUM
命令的保留時間範圍是由預設為 7 天的 delta.deletedFileRetentionDuration
資料表屬性所決定。
這表示 VACUUM
會移除過去 7 天內 Delta 數據表版本不再參考的數據檔。
若要保留較長期間的數據,例如支援持續時間較長的時間移動,請將此數據表屬性設定為較高的值。
下列範例顯示將此閾值設定為 30 天:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.deletedFileRetentionDuration' = '30 days');
參數
-
識別現有的 Delta 數據表。 名稱不得包含 時態規格或選項規格。
RETAIN num HOURS
保留閾值。
DRY RUN
傳回最多要刪除 1000 個檔案的清單。
FULL
或LITE
適用於: Databricks Runtime 16.1 和更新版本
會以完整 模式 執行真空作業。 這會刪除超過保留時限的資料檔案,以及資料表目錄中未被參考的所有檔案。 LITE
以 Lite 模式執行真空作業。VACUUM
不會尋找數據表目錄中的所有檔案,而是使用 Delta 事務歷史記錄來識別和移除保留期間內任何數據表版本不再參考的檔案。 如果因為 Delta 日誌已被剪除而無法完成VACUUM LITE
,則會引發 DELTA_CANNOT_VACUUM_LITE 例外。預設值為
FULL
。
清空非差異數據表
以遞歸方式清除與非 Delta 數據表相關聯的目錄,並移除超過保留閾值的未認可的檔案。 預設閾值為 7 天。
在非差異數據表上,Azure Databricks 會在寫入數據時自動觸發 VACUUM
作業。
語法
VACUUM table_name [RETAIN num HOURS]
參數
-
依名稱或路徑識別現有的數據表。
RETAIN num HOURS
保留閾值。