修复表
描述
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]
参数
-
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|
+-------+---+