2017-05-05 2 views
1

에 내가 하이브 2.1.1을 사용하고 있는데 내가 열 이름에 .있는 테이블을 만들려고 해요 : 내가 할 때"."을 사용할 수 없습니다. 하이브 테이블 열 이름

CREATE TABLE `test_table`(
    `field.with.dots` string 
); 

그래서 얻을 :

FAILED: ParseException line 4:0 Failed to recognize predicate ')'. Failed rule: '[., :] can not be used in column name in create table statement.' in column specification 
내가 뭔가 잘못하고 있어야합니다

hive documentation 말한다 때문에 :

하이브 릴리스 0.13.0에서

이상 기본적으로 열 이름이 혈중 알코올 농도 내에서 지정할 수 있습니다 kticks (`) 및 유니 코드 문자 (HIVE-6013) 포함

.은 유니 코드 문자입니다. 내가 뭘하고 있을지 생각해?

더 많은 컨텍스트를 제공하기 위해 Amazon EMR 5.5.0 클러스터에 있습니다. 감사!

답변

3

소스 코드 : HiveParser

... 
private char [] excludedCharForColumnName = {'.', ':'}; 
... 

    private CommonTree throwColumnNameException() throws RecognitionException { 
    throw new FailedPredicateException(input, Arrays.toString(excludedCharForColumnName) + " can not be used in column name in create table statement.", ""); 
    } 

락스 티켓 : 우리는 사용자가 점으로 열 이름을 조회하는 것을 허용하지 않기 때문에

: Disallow create table with dot/colon in column name

는 의욕을 유의하시기 바랍니다 emp.no와 같은 중간에 사용자가 테이블을 만들 수 없도록하십시오.

그것은 create table 취급,하지만 CTAS도 표를 ALTER 된 것 같다 쿼리 할 수 ​​없습니다와 같은 열이의 ...

hive> create table t as select 1 as `a.b.c`; 
OK 
hive> desc t; 
OK 
col_name data_type comment 
a.b.c     int           
Time taken: 0.441 seconds, Fetched: 1 row(s) 
hive> select * from t; 
FAILED: RuntimeException java.lang.RuntimeException: cannot find field a from [0:a.b.c] 

hive> create table t (i int); 
OK 
hive> alter table t change column i `a.b.c` int 
hive> select * from t; 
Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field a from [0:a.b.c] 

추신

나는 문서를 업데이트 한 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

+0

감사 (colon 확인), I는 활성화가 있고, 그것의 재미가를 사용하려고 들어 불행히도이 문제 :( –

+0

시가 해결되지 않습니다 예 :'\'a, b, c \'' –

+0

여러분의 도움에 감사드립니다 .JSON 문서에서 생성 된 스키마가 있기 때문에 불평입니다. 컬럼 이름이 인용되면 하이브 (Hive)가 신경을 써야하는지 잘 모르겠다. –