2016-09-15 2 views
1

하이브 테이블에서 snappy.parquet 파일을 만들려고합니다. 그것의 큰 파티션 테이블은 단지 그것의 작은 부분이 필요합니다. 이렇게 :하이브 결과로 마루 파일로 저장

message hive_schema { 
optional int32 _col0; 
optional binary _col1 (UTF8); 
optional binary _col2 (UTF8); 
optional binary _col3 (UTF8); 
optional binary _col4 (UTF8); 
optional binary _col5 (UTF8); 
optional binary _col6 (UTF8); 
optional binary _col7 (UTF8); 
optional int64 _col8; 
optional int64 _col9; 
optional int64 _col10; 
) 

SOURCE_TABLE에서 모든 열 이름을 잃어버린 : 그것은 다음과 같은 스키마 000000_0 파일을 생성

set parquet.compression=SNAPPY; 
set hive.exec.compress.output=true; 
set hive.exec.compress.intermediate=true; 
set hive.exec.parallel=true; 
set mapred.output.compress=true; 
set mapreduce.output.fileoutputformat.compress=true; 
set mapred.compress.map.output=true; 
set mapreduce.map.output.compress=true; 
set mapred.output.compression.type=BLOCK; 
set mapreduce.output.fileoutputformat.compress.type=BLOCK; 
set io.seqfile.compression.type = BLOCK; 
insert overwrite directory 'EXTERNAL_DIRECTORY' STORED AS PARQUET select * from SOURCE_TABLE; 

. 나 어떻게 하이브 테이블로 나중에 사용할 수 있도록 제대로 저장합니까?

+0

그래서 더 큰 소스 데이터 세트 중 하나의 파티션에서만 소싱하는 새 데이터 세트를 작성하려는 것 같습니다. 맞습니까? 그렇다면 나는 단지 당신이 이후의 특정 테이블에서 모든 데이터를 선택하는 새로운 외부 하이브 테이블을 만들 것입니다. 그런 다음 사용할 수있는 테이블 및 디렉토리/파일을 갖게됩니다. – Jared

+0

그래, 난 큰 테이블의 부부 파티션에서 작은 데이터 세트를 만들려고합니다. 나는 새로운 하이브 테이블을 먼저 만들고 그것을 선택하려고 할 것이다. – lacerated

답변

0

이후 소스 파티션에서 모든 데이터를 선택하여 데이터 세트에 대한 새로운 외부 테이블을 만들 것입니다. 그런 다음 활용할 수있는 테이블과 파일을 갖게됩니다. 현재 외부 테이블을 사용하여 select 문으로 create table을 수행 할 수 없으므로 먼저 테이블을 작성한 다음 데이터를로드해야합니다.

create external table yourNewTable (use your source table DDL...) 
    stored as parquet location '/yourNewLocation'; 

insert into yourNewTable 
    select * from yourSourceTable where yourPartitionedFieldNames = 'desiredPartitionName'; 
+0

하이브 쿼리 실행 중 오류 발생 : 문 컴파일 중 오류 발생 : FAILED : SemanticException [오류 10071] : 외부 테이블에 삽입 할 수 없음 – lacerated

+0

동일한 오류가있는 OVERWRITE 테이블 삽입을 시도했습니다. 내가 뭐 잘못하고 있니? – lacerated

+0

hive.insert.into.external.tables = true – Jared

관련 문제