用吸塵器清除未使用的數據文件
命令可以刪除不再由增量表引用的、超過保留閾值的數據文件真空
命令放在桌子上。運行真空
定期對成本和合規性很重要,原因如下:
刪除不使用的數據文件可以降低雲存儲成本。
刪除的數據文件
真空
可能包含已修改或刪除的記錄。從雲存儲中永久刪除這些文件可以確保這些記錄不再可訪問。
真空
不會自動觸發。係統默認的數據文件保留閾值為7天。若要更改此行為,請參見為時間旅行配置數據保留.
Delta Lake的一些特性使用元數據文件將數據標記為已刪除,而不是重寫數據文件。你可以使用REORG表格...應用(清洗)
以提交這些刪除並重寫數據文件。看到清除僅刪除元數據以強製重寫數據.
重要的
請注意
啟用磁盤緩存時,集群可能包含已被刪除的Parquet文件中的數據真空
.因此,可以查詢之前文件已被刪除的表版本的數據。重新啟動集群將刪除緩存的數據。看到配置磁盤緩存.
vacuum的示例語法
真空eventsTable——清除舊版本不需要的文件真空“/數據/事件”——清空基於路徑的表格中的文件真空δ.' /數據/事件/ '真空δ.' /數據/事件/ '保留One hundred.小時-真空文件不需要超過100小時的版本真空eventsTable幹運行——做演練,以獲得要刪除的文件列表
有關Spark SQL語法的詳細信息,請參見真空.
看到Delta Lake API文檔Scala, Java和Python語法細節。
清除僅刪除元數據以強製重寫數據
的REORG表格
命令提供應用(清洗)
語法重寫數據以應用軟刪除。軟刪除不重寫數據或刪除數據文件,而是使用元數據文件來指示某些數據值已更改。看到REORG表.
在Delta Lake中創建軟刪除的操作包括:
如果啟用了軟刪除,即使數據已被刪除或更新,舊數據仍可能物理地存在於表的當前文件中。要從表中物理刪除這些數據,請完成以下步驟:
運行
REORG表格...應用(清洗)
.這樣做之後,舊的數據將不再出現在表的當前的文件,但它仍然存在於用於時間旅行的舊文件中。運行
真空
刪除這些舊文件。
REORG表格
在操作完成時創建表的新版本。在此事務之前的曆史記錄中的所有表版本都引用較舊的數據文件。概念上,這類似於優化
命令,其中數據文件將被重寫,即使當前表版本中的數據保持一致。
重要的
數據文件隻有在文件被刪除時才會被刪除過期的根據真空
保存期。這意味著真空
一定要做延期後的嗎REORG
這樣舊的文件就過期了。保存期真空
可以減少所需的等待時間,以減少所保留的最大時間旅行曆史為代價。
真空需要什麼尺寸的集群?
為選擇正確的群集大小真空
,它有助於理解操作發生在兩個階段:
作業首先使用所有可用的執行器節點並行列出源目錄中的文件。將此列表與Delta事務日誌中當前引用的所有文件進行比較,以確定要刪除的文件。司機在這段時間裏無所事事。
然後驅動程序對要刪除的每個文件發出刪除命令。文件刪除是一個僅限驅動程序的操作,這意味著所有操作都發生在單個節點中,而工作節點處於空閑狀態。
為了優化成本和性能,Databricks推薦以下方法,特別是對於長時間運行的真空作業:
在集群上運行vacuum,將自動伸縮設置為1-4個工作人員,其中每個工作人員有8個核心。
選擇一個8到32核的驅動程序。增加驅動程序的大小以避免內存不足(OOM)錯誤。
如果真空
如果操作經常刪除超過10,000個文件或占用超過30分鍾的處理時間,您可能希望增加驅動程序的大小或工作人員的數量。
如果您發現在識別要刪除的文件時速度減慢,請添加更多的工作節點。如果在運行刪除命令時出現減速,請嚐試增加驅動程序的大小。
多長時間清洗一次?
Databricks建議定期跑步真空
在所有表上減少多餘的雲數據存儲成本。真空的默認保留閾值是7天。設置更高的閾值可以讓您訪問更多的表曆史記錄,但會增加存儲的數據文件數量,因此會從雲提供商那裏帶來更大的存儲成本。
為什麼不能用低保留閾值對Delta表進行真空處理?
警告
建議您將保留間隔設置為至少7天,因為舊的快照和未提交的文件仍然可以被並發的表讀寫器使用。如果真空
清理活動文件,並發讀取器可能會失敗,更糟糕的是,當真空
刪除尚未提交的文件。您必須選擇一個間隔,該間隔要長於運行的最長並發事務,以及任何流可以滯後於表的最新更新的最長時間。
三角洲湖有一個安全檢查,以防止您運行危險真空
命令。如果您確定在此表上執行的操作所花費的時間沒有超過您計劃指定的保留間隔,則可以通過設置Spark配置屬性關閉此安全檢查spark.databricks.delta.retentionDurationCheck.enabled
來假
.