Delta Lake:VACUUM保留30天是否会忽略180天表属性影响时间旅行
问题解答
是的,这台定期执行的VACUUM table_x RETAIN 720 HOURS;操作会忽略表级的180天配置,进而删除你用于6个月时间旅行所需的文件,具体原因和影响如下:
核心逻辑
Delta Lake中,VACUUM命令显式指定的RETAIN参数优先级高于表级的delta.deletedFileRetentionDuration属性:
delta.deletedFileRetentionDuration是表的默认保留规则,控制被删除/替换的数据文件的留存时长;- 当VACUUM命令带上
RETAIN参数时,会直接使用该参数指定的时长作为清理阈值,完全覆盖表属性的设置。
对你的表的影响
- 你的表虽然配置了180天的
delta.deletedFileRetentionDuration,但VACUUM会按30天的规则清理所有超过30天的已删除数据文件; - 这会导致你无法回溯到30天之前的版本——即使
delta.logRetentionDuration设为180天(事务日志还在),但对应的数据文件已经被清理,时间旅行功能会失效; - 事务日志本身不会被这个VACUUM操作删除(因为
delta.logRetentionDuration控制日志保留,VACUUM默认不清理日志,除非用特殊参数),但没有数据文件支撑,日志也无法用于恢复旧版本。
修复方案
- 修改VACUUM命令的
RETAIN参数,和表属性保持一致:VACUUM table_x RETAIN 4320 HOURS;(4320小时=180天); - 或者去掉
RETAIN参数,让VACUUM自动遵循表级的delta.deletedFileRetentionDuration配置:VACUUM table_x;。
内容的提问来源于stack exchange,提问作者mjeday
相关产品推荐
相关产品推荐

