2013-03-19 5 views
12

현재 하이브 테이블에로드 된 모든 파티션을 삭제할 수 있습니까?하이브 테이블에서 모든 파티션을 삭제 하시겠습니까?

나는 내가 복구 파티션 문 모든 파티션을로드 할 수 있습니다 alter table <table> drop partition(a=, b=...);

있는 단일 파티션을 삭제할 수 있습니다. 하지만 모든 파티션을 삭제할 수는 없습니다.

EMR에서 지원하는 최신 하이브 버전 인 0.8.1을 사용하고 있습니다.

답변

18

버전 0.9.0부터는 모든 파티션을 한 번에 삭제하는 데 사용할 수있는 drop partition 문에 comparators을 사용할 수 있습니다.

예는 drop_partitions_filter.q 테스트 케이스에서 촬영 : 만 경우

CREATE TABLE t2 AS 
SELECT column_name_1, ..., column_name_N FROM t1; 

그것이 비 엄격 모드에서 수행해야한다는 것입니다 :

create table ptestfilter (a string, b int) partitioned by (c string, d string); 
alter table ptestfilter add partition (c='US', d=1); 
alter table ptestfilter add partition (c='US', d=2); 
alter table ptestFilter add partition (c='Uganda', d=2); 
alter table ptestfilter add partition (c='Germany', d=2); 
alter table ptestfilter add partition (c='Canada', d=3); 
alter table ptestfilter add partition (c='Russia', d=3); 
alter table ptestfilter add partition (c='Greece', d=2); 
alter table ptestfilter add partition (c='India', d=3); 
alter table ptestfilter add partition (c='France', d=4); 

show partitions ptestfilter; 
alter table ptestfilter drop partition (c>'0', d>'0'); 
show partitions ptestfilter; 
0


는 원래 테이블의 데이터를 사용하여 테이블을 만듭니다

set hive.mapred.mode=nonstrict; 

도움이되기를 바랍니다. GL!

+0

'FAILED : 의미 분석 오류 : 1:23 대상 테이블이 분할되어 있기 때문에 파티션 열을 지정해야합니다. 토큰 't1'근처에서 오류가 발생했습니다. –

+1

@MattJoiner 수정되었지만 Balaswamy vaddeman에게 전체 크레딧이 적용됩니다. – www

3

아래와 같이 기존 테이블 t1에서 새 테이블 t2를 만듭니다. 새로운 테이블에 파티션이있는 경우

create table t2 as 
    select * from t1; 

드롭 된 테이블 t1

drop table t1; 

지금 확인.

show partitions t2; 
8

하이브는 파티션을 선택할 때 비교 연산자 (예를 들어 >, <, =, <>)를 사용할 수 있습니다. 예를 들어, 다음은 테이블의 모든 파티션을 삭제해야합니다.

ALTER TABLE table_name DROP PARTITION (partition_name > '0'); 
-2
truncate table table_name; 

모든 파티션을 삭제합니다. 분할 된 테이블을 삭제하려는 경우 특히 유용합니다.

+1

잘못된 대답을 삭제하십시오. –

관련 문제