Spark SQL----REPAIR TABLE
REPAIR TABLE恢复表目录中的所有分区,并更新Hive metastore。使用PARTITIONED BY子句创建表时,会在Hive metastore中生成并注册分区。但是,如果分区表是根据现有数据创建的,则分区不会自动在Hive metastore中注册。REPAIR TABLE对不存在的表或没有分区的表抛出异常。恢复分区的另一种方法是使用ALTER TABLE RECOVER PA
·
一、描述
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,该命令为基表文件夹中不属于任何表分区的所有子文件夹向session catalog添加新分区。
- DROP,该命令会从session catalog中删除文件系统中不存在位置的所有分区。
- 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|
+-------+---+
更多推荐
所有评论(0)