REPAIR TABLE
描述
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]
参数
-
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|
+-------+---+