我注意到我在 delta Lake 文件夹中只有 2 个检查点文件。每 10 次提交,就会创建一个新的检查点,并删除最旧的检查点。
例如今天早上,我有 2 个检查站:340 和 350。我可以从 340 到 359 进行时间旅行。
现在,在“写入”操作之后,我有 2 个检查点:350 和 360。我现在可以从 350 到 360 进行时间旅行。 什么可以删除旧的检查点?我怎样才能防止这种情况发生?
我使用的是 Azure Databricks 7.3 LTS ML。
答案 0 :(得分:1)
执行时间旅行的能力与检查站没有直接关系。检查点只是一种优化,它允许快速访问作为 Parquet 文件的元数据,而无需扫描单个事务日志文件。 This blog post 在 more details 中描述事务日志的详细信息
提交历史默认保留 30 天,并且可以按照 documentation 中的描述进行自定义。请注意,vacuum 可能会删除提交日志中仍引用的已删除文件,因为默认情况下数据仅保留 7 天。所以最好检查一下相应的设置。
如果您执行以下测试,则可以看到您拥有 10 个以上版本的历史记录:
df = spark.range(10)
for i in range(20):
df.write.mode("append").format("delta").save("/tmp/dtest")
# uncomment if you want to see content of log after each operation
#print(dbutils.fs.ls("/tmp/dtest/_delta_log/"))
然后检查日志中的文件 - 您应该看到单个事务的检查点和文件:
%fs ls /tmp/dtest/_delta_log/
还要检查历史记录 - 您应该至少有 20 个版本:
%sql
describe history delta.`/tmp/dtest/`
你应该可以进入早期版本:
%sql
SELECT * FROM delta.`/tmp/dtest/` VERSION AS OF 1
答案 1 :(得分:1)
如果您想将检查点保留 X 天,您可以通过这种方式将 delta.checkpointRetentionDuration 设置为 X 天:
spark.sql(f"""
ALTER TABLE delta.`path`
SET TBLPROPERTIES (
delta.checkpointRetentionDuration = 'X days'
)
"""
)