REPAIR TABLE

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

此命令修复或修改非 Delta Lake 表的分区。 将 SYNC METADATA 子句与 Delta Lake 配合使用,根据表元数据更新目录服务,或为用于 Iceberg 读取用途启用的表生成 Iceberg 元数据。

Unity Catalog 与 Hive 元存储之间支持的功能存在差异,且这些差异还取决于表是否由 Delta Lake 支持。

语法

[ MSCK ] REPAIR TABLE table_name
{
    [ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}

对于 勾选“是” Databricks SQL 勾选“是” Databricks Runtime 12.2 LTS 及更高版本,MSCK 是可选的。

参数

  • table_name

    表的名称。 如果找不到表,Azure Databricks 会引发 TABLE_OR_VIEW_NOT_FOUND 错误。

  • ADDDROPSYNCPARTITIONS

    适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 10.4 LTS 及更高版本

    使用 PARTITIONED BY 子句创建非 Delta 表时,将在 Hive 元存储中生成和注册分区。 但是,如果根据现有数据创建已分区表,则不会在 Hive 元存储中自动注册分区。 运行 MSCK REPAIR TABLE 以注册分区。

    恢复分区的另一种方法是使用 ALTER TABLE RECOVER PARTITIONS

    如果缓存该表,该命令会清除该表的缓存数据及其所有引用它的依赖项。 缓存将在下一次访问表或依赖项时填充。

    • ADD 命令会将不属于任何表分区的新分区添加到基表文件夹中所有子文件夹的会话目录中。 如果未指定其他选项,则 ADD 是默认参数。
    • DROP 命令将从会话目录中删除文件系统中无现有位置的所有分区。
    • SYNCDROPADD的组合。
  • SYNC METADATA

    仅限 Delta Lake。

    读取目标表的事务日志并更新目录服务中的元数据信息。 若要运行此命令,必须对目标表具有 MODIFY 和 SELECT 权限,并且对父架构和目录具有 USE SCHEMA 和 USE CATALOG 权限。

    此参数适用于 Databricks Runtime 16.1 及更高版本中的 Hive 元存储。 对于 Hive 元存储表,你需要具有 USAGE 和 MODIFY 特权。

    如果启用了 Delta UniForm(需要 Unity 目录),SYNC METADATA 会触发手动将当前 Delta 元数据转换为 Iceberg 元数据,并同步 Unity 目录 Iceberg 终结点的最新 Iceberg 版本。 请参阅使用 Iceberg 客户端读取增量表

示例(非 Delta Lake 表)

-- create a partitioned table from existing data /tmp/namesAndAges.parquet
> CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
  LOCATION "/tmp/namesAndAges.parquet";

-- SELECT * FROM t1 does not return results
> SELECT * FROM t1;

-- run MSCK REPAIR TABLE to recovers all the partitions
> MSCK REPAIR TABLE t1;

-- SELECT * FROM t1 returns results
> SELECT * FROM t1;
    name age
  ------- ---
  Michael  20
   Justin  19
     Andy  30

示例(Unity Catalog 表)

-- run MSCK REPAIR TABLE t1 SYNC METADATA to update the metadata info to Unity Catalog service
> MSCK REPAIR TABLE t1 SYNC METADATA