2011-11-24 3 views
1

내가 아마존의 엘라스틱 맵리 듀스 사용하고 분할 된 기존에서 새 테이블을 만들고 난 하이브 테이블과 같이 하루 폴더의 로그 아마존 S3에 저장된 파일 및 분할의 시리즈를 기반으로 만든이 :하이브 표

  • 데이터/일 = 2011-09-01/log_file.tsv
  • 데이터/일 = 2011-09-02/log_file.tsv
나는 현재 일부를 필터링 추가 테이블을 만들려고하고

이러한 로그 파일에서 원치 않는 활동을하지만이 작업을 수행하는 방법을 알아낼 수 없으며 다음과 같은 오류가 계속 발생합니다.

FAILED: Error in semantic analysis: need to specify partition columns because the destination table is partitioned.

내 초기 테이블을 작성하는 경우 문은 다음과 같은 : 초기 테이블이 잘 작동하고 나는 아무런 문제를 조회 할 수있었습니다

CREATE EXTERNAL TABLE IF NOT EXISTS table1 (
... fields ... 
) 
PARTITIONED BY (DAY STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LOCATION 's3://bucketname/data/'; 

있다.

이전의 구조를 공유하지만 단순히 데이터를 필터링하는 새 테이블을 어떻게 작성해야합니까? 이것은 효과가없는 것 같습니다. 제가 위에서 언급 한 바와 같이

CREATE EXTERNAL TABLE IF NOT EXISTS table2 LIKE table1; 

FROM table1 
INSERT OVERWRITE TABLE table2 
SELECT * WHERE 
col1 = '%somecriteria%' AND 
more criteria... 
; 

,이 반환

FAILED: Error in semantic analysis: need to specify partition columns because the destination table is partitioned.

감사합니다!

답변

0

나는 like 옵션을 한번도 사용하지 않았습니다. 저에게 보여 주신 것에 대해 감사드립니다. 실제로 첫 번째 테이블에도있는 모든 파티션이 생성됩니까? 그렇지 않은 경우 문제가 될 수 있습니다. 난 당신이 select clause에 열을 지정 (뿐만 아니라 partition clause의 파티션 열) 할 생각으로,

create external table if not exists table2 like table1; 
insert overwrite table table2 partition(part) select col1, col2 from table1; 

이 최선의 해결책되지 않을 수 있습니다 : 당신은 동적 파티션를 사용하여 시도 할 수 있습니다.

동적 파티션을 켜야합니다.

이 정보가 도움이되기를 바랍니다.

1

이 항상 나를 위해 작동 : 내가 SELECT 문에서 컬럼으로 '일'이 추가되었습니다

CREATE EXTERNAL TABLE IF NOT EXISTS table2 LIKE table1; 
INSERT OVERWRITE TABLE table2 PARTITION (day) SELECT col1, col2, ..., day FROM table1; 
ALTER TABLE table2 RECOVER PARTITIONS; 

알 수 있습니다. 또한 하이브가 table2에서 새로 생성 된 파티션을 인식하는 데 필요한 ALTER TABLE 라인이 있음을 주목하십시오.