FSCK REPAIR TABLE

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

检测和修复 Delta 表的元数据和数据文件问题。 该命令有三个渐进级别:

  • 仅修复事务日志
  • 修复事务日志并删除缺少的数据文件
  • 修复事务日志、删除缺少的数据文件以及删除损坏的数据文件

每个级别包括上一个级别的所有操作。

语法

FSCK REPAIR TABLE table_name [fsck_mode] [DRY RUN]

fsck_mode
  { METADATA ONLY |
    VERIFY ALL FILES |
    VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp }

参数

  • table_name

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

  • fsck_mode

    适用于:勾选为是 Databricks Runtime 18.0 及更高版本

    定义需要采取的动作。

    • 如果未指定(默认模式):

      • 验证并修复构造最新表快照所需的事务日志。
      • 从表中删除对基础文件系统中不再存在的数据文件的引用。
      • 从表中删除对分区值违反 NOT NULL 约束的数据文件的引用。
    • METADATA ONLY

      验证并修复构造最新表快照所需的事务日志。

    • VERIFY ALL FILES

      从默认模式执行所有操作。 验证所有活动数据文件的完整性。 从表中删除对完整性检查失败的任何文件的引用。

    • VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp

      从默认模式执行所有操作。 验证其修改时间在指定时间范围内的活动数据文件的完整性。 从表中删除对完整性检查失败的任何文件的引用。 start_timestampend_timestamp两个都是必须能计算出时间戳的常量表达式。 表达式可以包含 current_timestamp()current_date() 函数。

  • 干运行

    报告元数据和数据文件中FSCK REPAIR TABLE将修复的问题,而不进行更改。

    默认情况下,DRY RUN 仅返回前 1000 个文件。 在笔记本中运行命令之前,可以将会话变量 spark.databricks.delta.fsck.maxNumEntriesInResult 设置为更高的值来增加此阈值。

注释

  • FSCK 仅修复最新的数据表快照。 不会验证或修复历史检查点和非活动文件。

  • 在默认模式下检查文件是否存在或验证模式中的 VERIFY 文件完整性时, FSCK 还会验证任何关联的删除向量。 如果 Parquet 数据文件或其关联的删除向量缺失或损坏,则会从表中删除引用。

返回

使用 DRY RUN 命令运行时,该命令将返回具有以下模式的数据帧:

  • dataFilePath STRING NOT NULL
  • dataFileMissing BOOLEAN NOT NULL
  • deletionVectorPath STRING
  • deletionVectorFileMissing BOOLEAN NOT NULL

适用于:勾选为是 Databricks Runtime 18.0 及更高版本

  • checkpointFilePath STRING
  • fileCrcCorrupt BOOLEAN NOT NULL
  • fileUnreadable BOOLEAN NOT NULL
  • fileMetadataHasInvalidPartitionValues BOOLEAN NOT NULL
  • deletionVectorCorrupt BOOLEAN NOT NULL

示例

— Assume 005.checkpoint.parquet has CRC checksum corruption.
> FSCK REPAIR TABLE t METADATA ONLY DRY RUN;
 dataFilePath dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath                fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------ --------------- ------------------ ------------------------- --------------------------------- -------------- -------------- ------------------------------------- ---------------------
 null         false           null               false                     _delta_log/005.checkpoint.parquet true           false          false                                 false

— Assume file1.parquet is missing, whose deletion vector dv1.bin is also missing.
— Assume file2.parquet has partition value being NULL, where the partition column is NOT NULL.
> FSCK REPAIR TABLE t DRY RUN;
 dataFilePath  dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------- --------------- ------------------ ------------------------- ------------------ -------------- -------------- ------------------------------------- ---------------------
 file2.parquet true            dv1.bin            true                      null               false          false          false                                 false
 file2.parquet false           null               false                     null               null           null           true                                  false

— Assume file1.parquet is corrupt and unreadable.
— Assume file2.parquet has a corrupt deletion vector dv2.bin.
> FSCK REPAIR TABLE t VERIFY ALL FILES DRY RUN;
 dataFilePath  dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------- --------------- ------------------ ------------------------- ------------------ -------------- -------------- ------------------------------------- ---------------------
 file1.parquet false           null               false                     null               false          true           false                                 false
 file2.parquet false           dv2.bin            false                     null               null           null           false                                 true