REPAIR TABLE

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

此命令将 Delta 表元数据更新到 Unity Catalog 服务。 对于非 Delta 表,它会修复表的分区并更新 Hive 元存储。

  • Delta 表:使用 SYNC METADATA 参数对 Delta 表执行此命令时,将读取目标表的 Delta 日志,并将元数据信息更新到 Unity Catalog 服务。
  • 非 Delta 表:对非 Delta 表执行此命令时,将恢复非 Delta 表目录中的所有分区,并更新 Hive 元存储。

语法

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

对于 check marked yes Databricks SQL check marked yes Databricks Runtime 12.1 及更高版本,MSCK 是可选的。

参数

  • table_name

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

  • ADDDROPSYNCPARTITIONS

    适用于:check marked yes Databricks SQL check marked yes Databricks Runtime 10.0 及更高版本

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

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

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

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

    读取目标表的增量日志,并更新 Unity Catalog 服务中的元数据信息。 若要运行此命令,必须对目标表以及父架构和目录的“用法”具有“修改”和“选择”权限。 如果目标表未存储在 Unity 目录中,则带有此参数的命令将失败。

    如果启用了 Delta UniForm,SYNC METADATA 会触发当前 Delta 元数据到 Iceberg 元数据的手动转换,并同步 Unity Catalog Iceberg 终结点的最新 Iceberg 版本。 请参阅通用格式 (UniForm),了解 Iceberg 与 Delta 表的兼容性

示例(非 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