修复表

描述

REPAIR TABLE 恢复表目录中的所有分区并更新 Hive 元存储。使用 PARTITIONED BY 子句创建表时,会在 Hive 元存储中生成并注册分区。但是,如果分区表是从现有数据创建的,则分区不会自动注册到 Hive 元存储中。用户需要运行 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|
+-------+---+