真空零保留導致數據丟失

不要禁用spark.databricks.delta.retentionDurationCheck.enabled與保留零和運行真空,以避免數據丟失。

寫的DD沙瑪

去年發表在:2022年10月7日

問題

你添加數據到三角洲表,但數據毫無征兆地消失了。沒有明顯的錯誤消息。

導致

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

% sql真空< name-of-delta-table >保留0小時

% sql真空三角洲。' < delta_table_path > '保持0小時

真空它可以配置為保持0小時刪除任何文件,不屬於版本是真空的。這包括承諾文件,並發事務未提交的文件和臨時文件。

考慮下麵的例子時間表:

  • 真空100年開始運行在01:17 UTC版本。
  • 數據文件命名——< xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.xxx > .snappy一部分。拚花是添加到版本在101年01:18 UTC。
  • 版本101承諾01:19 UTC。
  • 真空仍在運行,刪除數據文件——< xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.xxx > .snappy一部分。鋪在01:20 UTC版本中增加了101個。
  • 真空完成01:22 UTC。

在這個例子中,真空版本上執行100年和刪除所有添加到版本101。

解決方案

  • 磚建議你設置一個真空保留時間間隔至少7天,因為舊的快照和未提交的文件仍然可以使用並發讀者或作者。
  • 不設置spark.databricks.delta.retentionDurationCheck.enabled在你的火花配置為false。
  • 如果你設置spark.databricks.delta.retentionDurationCheck.enabled火花中錯誤的配置,您必須選擇一個時間間隔較長時間最長的並發事務和最長的時期,任何流可以落後於最新更新表。

檢查真空磚文檔(AWS|Azure|GCP更多信息)。

這篇文章有用嗎?