修复表

描述

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

如果表被缓存,该命令会清除表及其所有依赖项的缓存数据。当下次访问表或其依赖项时,缓存将会被惰性填充。

语法

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

参数

示例

-- 从现有数据创建一个分区表 /tmp/namesAndAges.parquet
CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
LOCATION "/tmp/namesAndAges.parquet";
-- 从 t1 中选择所有记录不返回结果
SELECT * FROM t1;
-- 运行 REPAIR TABLE 来恢复所有分区
REPAIR TABLE t1;
-- 从 t1 中选择所有记录返回结果
SELECT * FROM t1;
+-------+---+
| name|age|
+-------+---+
|Michael| 20|
+-------+---+
| Justin| 19|
+-------+---+
| Andy| 30|
+-------+---+