REPAIR TABLE

描述

REPAIR TABLE 会恢复表目录中的所有分区并更新 Hive metastore。当使用 PARTITIONED BY 子句创建表时,分区会在 Hive metastore 中生成并注册。然而,如果分区表是从现有数据创建的,分区不会自动注册到 Hive metastore 中。用户需要运行 REPAIR TABLE 来注册分区。对不存在的表或没有分区的表运行 REPAIR TABLE 会抛出异常。恢复分区的另一种方法是使用 ALTER TABLE RECOVER PARTITIONS。为了与 Hive 兼容,也可以使用 MSCK REPAIR TABLE 调用此命令。

如果表被缓存,该命令会清除表的缓存数据以及所有引用该表的依赖项的缓存数据。下次访问该表或依赖项时,缓存将进行延迟填充。

语法

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

参数

示例

-- 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 REPAIR TABLE to recovers all the partitions
REPAIR TABLE t1;

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