2016-09-23 34 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將所有分區列名稱視爲小寫) ,但是一旦使我的分區路徑小寫,它就像一個魅力。