복붙노트

[HADOOP] 하이브 1.2 테이블 변경을 통해 파티션을 복구 할 수 없음

HADOOP

하이브 1.2 테이블 변경을 통해 파티션을 복구 할 수 없음

나는 ALTER TABLE MY_EXTERNAL_TABLE이 파티션 복구를 실행할 수 없습니다입니다; 내가 대체 MSCK 수리 표를 실행할 때 하이브 1.2에, 그러나 그것의 단지 하이브 메타 스토어에 존재하지 않는 파티션을 나열하고 추가하지 MY_EXTERNAL_TABLE. 하이브 간부의 소스 코드를 기반으로 아래에 볼 수 있어요 조직 / 아파치 / 하둡 / 하이브 / QL / 해석 / HiveParser.g : 1001 : 파티션 복구를위한 문법에는 토큰 일치를 프로그래머없는 일.

친절 하이브 1.2에 외부 테이블을 생성 한 후 모든 파티션을 복구 할 수있는 방법이 있다면 알려주세요.

ALTER TABLE MY_EXTERNAL_TABLE이 파티션을 복구하기위한 스택 추적; :

NoViableAltException(26@[])
    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

주 : 하둡과 하이브 1.2 스토리지, HDP 2.4 S3을 사용하고있다.

해결법

  1. ==============================

    1.약간의 시간 디버깅을 지출하는 것은 수정을 얻었다 후 안녕, 이유는 내 파티션 이름은 낙타의 경우했다대로, MSCK을 통해 파티션을 추가하지 않은 것입니다 (파일 시스템은 대소 문자를 구분하지만, 하이브 취급하는 모든 파티션 열 이름을 소문자로)는, 그러나 한 번 만들어 소문자로 내 파티션 경로는 그것이 마치 마법처럼 작동합니다.

    약간의 시간 디버깅을 지출하는 것은 수정을 얻었다 후 안녕, 이유는 내 파티션 이름은 낙타의 경우했다대로, MSCK을 통해 파티션을 추가하지 않은 것입니다 (파일 시스템은 대소 문자를 구분하지만, 하이브 취급하는 모든 파티션 열 이름을 소문자로)는, 그러나 한 번 만들어 소문자로 내 파티션 경로는 그것이 마치 마법처럼 작동합니다.

  2. from https://stackoverflow.com/questions/39661532/not-able-to-recover-partitions-through-alter-table-in-hive-1-2 by cc-by-sa and MIT license