2014-07-15 2 views
3

파티션이있는 외부 HIVE 테이블을 만들려고합니다. 내 열 이름 중 일부는 대문자입니다. 이로 인해 대문자가있는 열 이름의 값이 이 NULL로 반환 되었기 때문에 테이블을 만드는 동안 문제가 발생했습니다. 그런 다음 ParquetSerDe를 수정하여 SERDEPROPERTIES를 사용하여이 작업을 처리했습니다.이 작업은 외부 테이블 (분할되지 않음)에서 작동합니다. 이제 나는 파티션이있는 외부 테이블을 만들려고 시도하고 때마다 대문자 열 (예 : FieldName)에 액세스하려고하면이 오류가 발생합니다. tablename에서 FieldName을 선택하십시오.하이브의 대/소문자를 구분하는 열 ​​이름

FAILED: RuntimeException Java. Lang.RuntimeException: cannot find field 
    FieldName from 
    [org.apache.hadoop[email protected]4f45884b, 
    org.apache.hadoop[email protected]8f11f27, 
    org.apache.hadoop[email protected]77e8eb0e, 
    org.apache.hadoop[email protected]1dae4cd, 
    org.apache.hadoop[email protected]623e336d 
    ] 

생각해 볼만한 제안이 있습니까? 데이터 소스의 스키마를 변경할 수 없습니다.

내가 테이블을 만드는 데 사용하는 명령입니다 - 추가 한 후

CREATE EXTERNAL TABLE tablename (fieldname string) 
    PARTITIONED BY (partion_name string) 
    ROW FORMAT SERDE 'path.ModifiedParquetSerDeLatest' 
    WITH SERDEPROPERTIES ("casesensitive"="FieldName") 
    STORED AS INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat' 
    OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat' 

을 그리고 파티션 :

ALTER TABLE tablename ADD PARTITION (partition_name='partitionvalue') 
    LOCATION '/path/to/data' 
+0

해결 했습니까? –

+0

@ AndréCasimiro이 작업을한지 얼마되지 않은데 회사 여름 인턴쉽 때였습니다. 다음은 내가이 문제를 제기 한 쪽모이도 메일 링리스트에서 발췌 한 내용입니다. https://mail-archives.apache.org/mod_mbox/parquet-dev/201407.mbox/%[email protected] .com % 3E JIRA 문제를 확인하십시오. 죄송합니다. 여기에 내 조사 결과를 게시하지 않았습니다. 문제를 해결하기 위해 해킹했음을 기억하지만, 정확히 얼마나 효과가 있었고 우리가 한 일을 정확히 기억하지 못합니다. – Raymond26

답변

0

이 오래된 질문이지만, 파티션 열이 대소 문자를 구분이어야의 때문에 저장되어있는 유닉스 파일 시스템.

경로 "/ collumnname = 값 /"하이브에 대한 대소 문자를 구분 열 이름에 의존 "/ collumnName = 값 /"

유닉스

그렇게이 고려되어야한다 나쁜 관행 경로에서 항상 다릅니다.