零保留的真空會導致數據丟失

不要禁用spark. databicks .delta. retentiondurationcheck .enabled,運行vacuum時保留為零,以避免數據丟失。

寫的DD沙瑪

最後發布日期:2022年10月7日

問題

將數據添加到Delta表中,但數據會毫無警告地消失。沒有明顯的錯誤消息。

導致

這可能發生在spark.databricks.delta.retentionDurationCheck.enabled設置為而且真空配置為保留0小時。

%sql VACUUM 保留0小時

%sql VACUUM增量。'  '保留0小時

真空配置為保留0小時,則可以刪除不屬於正在抽真空的版本的任何文件。這包括已提交的文件、未提交的文件和並發事務的臨時文件。

考慮下麵的時間軸示例:

  • 真空在版本100上01:17 UTC開始運行。
  • 一個名為part-.snappy的數據文件。parquet在UTC時間01:18添加到版本101。
  • 版本101在UTC時間01:19提交。
  • 真空仍在運行,其中刪除了數據文件部分-.snappy。parquet在101版本01:20 UTC添加。
  • 真空在UTC 01:22完成。

在這個例子中,真空在版本100上執行,並刪除了添加到版本101的所有內容。

解決方案

  • Databricks建議您設置一個真空保留間隔至少為7天,因為舊的快照和未提交的文件仍然可以被並發的表讀取者或寫入者使用。
  • 不要設置spark.databricks.delta.retentionDurationCheck.enabled在Spark配置中設置為false。
  • 如果你設置了spark.databricks.delta.retentionDurationCheck.enabled如果在Spark配置中設置為false,則必須選擇一個時間間隔,該時間間隔必須大於運行時間最長的並發事務以及任何流可以滯後於表的最新更新的最長時間。

查閱Databricks VACUUM文檔(AWS|Azure|GCP),以獲取更多資料。

這篇文章有用嗎?