如何防止在 Azure Databricks 中删除 Delta Lake 检查点?

What to do to prevent Delta Lake checkpoints to be removed in Azure Databricks?

我注意到我在 delta lake 文件夹中只有 2 个检查点文件。每 10 次提交,就会创建一个新的检查点,并删除最旧的检查点。

例如今天早上,我有 2 个检查点:340 和 350。我可以从 340 到 359 进行时间旅行。

现在,在“写入”操作之后,我有 2 个检查点:350 度和 360 度。我现在可以从 350 度到 360 度进行时间旅行。 什么可以删除旧的检查点?我怎样才能防止这种情况发生?

我正在使用 Azure Databricks 7.3 LTS ML。

时间旅行的能力与关卡没有直接关系。检查点只是一种优化,它允许快速访问元数据作为 Parquet 文件,而无需扫描单个事务日志文件。 This blog post更详细地描述了事务日志的详细信息

提交历史默认保留 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

如果你想将你的检查点保留 X 天,你可以这样设置 delta.checkpointRetentionDuration 到 X 天:

spark.sql(f"""
        ALTER TABLE delta.`path`
            SET TBLPROPERTIES (
                delta.checkpointRetentionDuration = 'X days'
            )
        """
)