VACUUM

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

从表目录中删除未使用的文件。

注意

此命令的工作方式不同,具体取决于你使用的是 Delta 表还是 Apache Spark 表。

清空 Delta 表

以递归方式清理与 Delta 表关联的目录。 有关完整详细信息和限制,请参阅使用清空移除未使用的数据文件

VACUUM 删除表目录中不由 Delta 管理的所有文件,并删除不再处于表事务日志最新状态且超过保留期阈值的数据文件。 VACUUM 将跳过以下划线字符 (_) 开头的所有目录,其中包括 _delta_log。 对以下划线字符开头的列上的表进行分区不受此规则限制;VACUUM 扫描目标 Delta 表中包含的所有有效分区。 根据从 Delta 的事务日志中以逻辑方式删除 Delta 表数据文件的时间和保留时间(而不是其在存储系统上的修改时间戳)删除这些文件。 默认阈值为 7 天。

Azure Databricks 不会对 Delta 表自动触发 VACUUM 操作。

如果对 Delta 表运行 VACUUM,则将无法再回头按时间顺序查看在指定数据保留期之前创建的版本。

警告

建议将保留期间隔设置为至少 7 天,因为并发读取器或写入器仍可将旧快照和未提交的文件用于表。 如果 VACUUM 清理活动文件,则并发读取器可能会失败;更糟糕的是,当 VACUUM 删除尚未提交的文件时,表可能会损坏。 选择的时间间隔必须比最长运行并发事务长,也必须比任何流可滞后于对表的最新更新的最长时间长。

Delta Lake 具有一项安全检查,用于防止运行危险的 VACUUM 命令。 在 Databricks Runtime 中,如果确定对此表执行的操作所耗的时间均未超过计划指定的保留期间隔,可通过将 Spark 配置属性 spark.databricks.delta.retentionDurationCheck.enabled 设置为 false 来关闭此安全检查。

VACUUM table_name [RETAIN num HOURS] [DRY RUN]

重要

VACUUM 命令的保留时段由 delta.deletedFileRetentionDuration 表属性决定,默认为 7 天。 这意味着 VACUUM 会删除过去 7 天内 Delta 表版本不再引用的数据文件。 如果想要保留数据更长时间(例如支持持续时间更长时间的时间旅行),则必须将此表属性设置为较高值。 下面的示例演示将此阈值设置为 30 天:

ALTER TABLE table_name SET TBLPROPERTIES ('delta.deletedFileRetentionDuration' = '30 days');

参数

  • table_name

    标识现有的 Delta 表。 名称不得包含时态规范或选项规范

  • RETAIN num HOURS

    保留期阈值。

  • DRY RUN

    返回要删除的文件的列表(最多 1000 个文件)。

清空非 Delta 表

以递归方式清空与非 Delta 表关联的目录,并删除超过保留期阈值的未提交文件。 默认阈值为 7 天。

Azure Databricks 在数据写入时对非 Delta 表自动触发 VACUUM 操作。

语法

VACUUM table_name [RETAIN num HOURS]

参数

  • table_name

    按名称或路径标识现有表。

  • RETAIN num HOURS

    保留期阈值。