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]
参数
-
table_identifier
指定要修复的表的名称。表名可以选择性地包含数据库名进行限定。
语法:
[ database_name. ] table_name
-
{ADD|DROP|SYNC} PARTITIONS
指定如何恢复分区。如果未指定,默认是 ADD。
- ADD,该命令会将基础表文件夹中所有不属于任何表分区的子文件夹添加为新的分区到会话目录。
- DROP,该命令会从会话目录中删除所有在文件系统中位置不存在的分区。
- SYNC 是 DROP 和 ADD 的组合。
示例
-- 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|
+-------+---+