如何在Databricks中清除Delta Lake版本历史?
清除Delta Lake表全部版本历史(无需删除文件夹的方案)
除了直接删除Delta表的存储文件夹,有两种可靠方法可以完全清除版本历史,仅保留当前最新版本的数据:
方案1:通过VACUUM强制清理所有旧版本
默认情况下Delta Lake限制VACUUM最少保留7天的版本,防止并发操作引发问题,但可以临时关闭该限制后清理所有历史版本:
- 关闭保留时长检查:
spark.conf.set("spark.databricks.delta.retentionDurationCheck.enabled", "false")
- 执行
VACUUM 0清理所有早于0小时的版本(即仅保留当前最新版本):
from delta.tables import DeltaTable delta_table = DeltaTable.forPath(spark, "/mnt/lake/BASE/SQLClassification/cdcTest/dbo/cdcmergetest/1") delta_table.vacuum(0)
- 操作完成后恢复默认安全配置:
spark.conf.set("spark.databricks.delta.retentionDurationCheck.enabled", "true")
方案2:重写Delta表生成全新版本
如果不想修改安全配置,可以直接读取当前表的最新数据,重新写入原路径覆盖,生成仅含当前版本的新Delta表:
- 读取表的最新数据:
latest_data = spark.read.format("delta").load("/mnt/lake/BASE/SQLClassification/cdcTest/dbo/cdcmergetest/1")
- 覆盖原路径写入(建议先备份原表):
# 可选:备份原表到其他路径 # latest_data.write.format("delta").save("/mnt/lake/BASE/SQLClassification/cdcTest/dbo/cdcmergetest/1_backup") # 覆盖原路径,生成无历史版本的新表 latest_data.write.format("delta").mode("overwrite").save("/mnt/lake/BASE/SQLClassification/cdcTest/dbo/cdcmergetest/1")
注意事项
- 执行任何清理操作前,确保没有正在运行的并发写入任务,避免数据损坏。
- 操作前务必备份数据,防止意外丢失。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

