복붙노트

[HADOOP] Hive ParseException- 'end' 'string'근처의 입력을 인식 할 수 없습니다

HADOOP

Hive ParseException- 'end' 'string'근처의 입력을 인식 할 수 없습니다

기존 DynamoDB 테이블에서 Hive 테이블을 생성하려고 할 때 다음 오류가 발생합니다.

NoViableAltException(88@[])
at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:9123)
at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:30750)
...more stack trace...
FAILED: ParseException line 1:77 cannot recognize input near 'end' 'string' ',' in column specification

쿼리는 다음과 같습니다 (무죄를 보호하기 위해 단순화 됨).

CREATE EXTERNAL TABLE moveProjects (cid string, end string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");

기본적으로 Projects DynamoDB 테이블의 내용을 포함하는 Hive 테이블을 만들려고하는데 create 문이 Hive / Hadoop에서 구문 분석 오류를 발생시킵니다.

해결법

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

    1.문제는 실제로 구문 오류가 아니며 Hive ParseException은 Hive의 예약 키워드 (이 경우 end)에 의해서만 발생합니다.

    문제는 실제로 구문 오류가 아니며 Hive ParseException은 Hive의 예약 키워드 (이 경우 end)에 의해서만 발생합니다.

    해결책 : 문제가되는 열 이름 주위에 백틱을 사용하십시오.

    CREATE EXTERNAL TABLE moveProjects (cid string, `end` string, category string)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
    TBLPROPERTIES ("dynamodb.table.name" = "Projects",
        "dynamodb.column.mapping" = "cid:cid,end:end,category:category");
    

    끝 부분에 추가 백틱이 있으면 쿼리가 예상대로 작동합니다.

    출처 : Facebook Phabricator 추적기의 Hive 티켓

  2. ==============================

    2.삽입 덮어 쓰기를 수행하는 동안 폴더 경로에서 / Date = 20161003을 사용하고 있는데 실패했습니다. 나는 / Dt = 20161003으로 바꿨고 효과가 있었다.

    삽입 덮어 쓰기를 수행하는 동안 폴더 경로에서 / Date = 20161003을 사용하고 있는데 실패했습니다. 나는 / Dt = 20161003으로 바꿨고 효과가 있었다.

  3. ==============================

    3.여전히 쿼리 작업을 원한다면 예약 된 키워드를 벗어날 수 있습니다 !!

    여전히 쿼리 작업을 원한다면 예약 된 키워드를 벗어날 수 있습니다 !!

    끝을`end`로 바꿉니다.

    예약 키워드 목록은 다음과 같습니다. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

    CREATE EXTERNAL TABLE moveProjects (cid string, `end` string, category string)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
    TBLPROPERTIES ("dynamodb.table.name" = "Projects",
        "dynamodb.column.mapping" = "cid:cid,end:end,category:category");
    
  4. from https://stackoverflow.com/questions/18640760/hive-parseexception-cannot-recognize-input-near-end-string by cc-by-sa and MIT license