2016-09-23 207 views
0

我无法在hive 1.2上运行ALTER TABLE MY_EXTERNAL_TABLE RECOVER PARTITIONS;,但是当我运行替代MSCK REPAIR TABLE MY_EXTERNAL_TABLE时,它只列出了Hive Meta Store中没有的分区,并未添加它。基于来自hive-exec的源代码,我可以在org/apache/hadoop/hive/ql/parse/HiveParser.g:1001:1之下看到,在RECOVER PARTITIONS的语法中没有令牌匹配。无法通过Hive 1.2中的alter table恢复分区

请让我知道如果在Hive 1.2上创建外部表之后恢复所有分区的方法。

堆栈跟踪ALTER TABLE MY_EXTERNAL_TABLE RECOVER PARTITIONS;

NoViableAltException([email protected][]) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.alterTableStatementSuffix(HiveParser.java:7946) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatement(HiveParser.java:7409) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:2693) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1658) 
    at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1117) 
    at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202) 
    at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:431) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:316) 
    at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1189) 
    at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1237) 
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1126) 
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1116) 
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:216) 
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:168) 
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:379) 
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:739) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:684) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:624) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
FAILED: ParseException line 1:45 cannot recognize input near 'recover' 'partitions' '<EOF>' in alter table statement 

注意:正在使用S3作为存储,HDP 2.4 Hadoop和蜂房1.2。

回答

1

嗨花了一些时间调试后得到了修复,原因是它没有通过MSCK添加分区,因为我的分区名称是骆驼大小写(FileSystem区分大小写,但hive将所有分区列名称视为小写) ,但是一旦使我的分区路径小写,它就像一个魅力。