修复表
描述
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 的组合。
示例
-- 从现有数据创建一个分区表 /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|
+-------+---+