問題
你添加數據到三角洲表,但數據毫無征兆地消失了。沒有明顯的錯誤消息。
導致
這可能發生在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火花中錯誤的配置,您必須選擇一個時間間隔較長時間最長的並發事務和最長的時期,任何流可以落後於最新更新表。