适用于:
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 }
参数
-
标识现有的 Delta 表。 名称不得包含 时态规范或选项规范。
fsck_mode适用于:
Databricks Runtime 18.0 及更高版本定义需要采取的动作。
如果未指定(默认模式):
- 验证并修复构造最新表快照所需的事务日志。
- 从表中删除对基础文件系统中不再存在的数据文件的引用。
- 从表中删除对分区值违反
NOT NULL约束的数据文件的引用。
METADATA ONLY验证并修复构造最新表快照所需的事务日志。
VERIFY ALL FILES从默认模式执行所有操作。 验证所有活动数据文件的完整性。 从表中删除对完整性检查失败的任何文件的引用。
VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp从默认模式执行所有操作。 验证其修改时间在指定时间范围内的活动数据文件的完整性。 从表中删除对完整性检查失败的任何文件的引用。
start_timestamp和end_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 NULLdataFileMissing BOOLEAN NOT NULLdeletionVectorPath STRINGdeletionVectorFileMissing BOOLEAN NOT NULL
适用于:
Databricks Runtime 18.0 及更高版本
checkpointFilePath STRINGfileCrcCorrupt BOOLEAN NOT NULLfileUnreadable BOOLEAN NOT NULLfileMetadataHasInvalidPartitionValues BOOLEAN NOT NULLdeletionVectorCorrupt 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