Apache Hive
HIVE SQL - EXCHANGE PARTITION
김은열
2020. 10. 28. 10:57
EXCHANGE PARTITION 명령은 소스 테이블에서 대상 테이블로 파티션을 이동하고 각 테이블의 메타 데이터를 변경합니다.
명령이 실행되면 HDFS에서 원본 테이블의 파티션 폴더 이름이 변경되어 대상 테이블의 파티션 폴더로 이동합니다. Hive 메타 스토어가 업데이트되어 소스 및 대상 테이블의 메타 데이터가 그에 따라 변경됩니다. 파티션 속성은 전체 또는 부분적으로 지정할 수 있습니다.
Constraints
-
대상 테이블에는 교환 파티션을 포함 할 수 없습니다.
-
인덱스가 존재하면 작업이 실패합니다
-
Exchange 파티션은 소스 또는 대상으로 트랜잭션 테이블을 사용할 수 없습니다. 또는 LOAD DATA 또는 INSERT OVERWRITE 명령을 사용하여 트랜잭션 테이블간에 파티션을 이동합니다.
-
소스 테이블 이름과 대상 테이블 이름이 동일한 테이블 스키마를 가지고 있어야합니다. 스키마가 다른 경우, 다음과 같이 예외처리 됩니다.
테이블에 다른 스키마가 있습니다. 그 파티션은 교환 할 수 없습니다
Syntax
ALTER TABLE <dest_table> EXCHANGE PARTITION (<[partial] partition spec>) WITH TABLE <src_table>
Example Usage – 기본
--Create two tables, partitioned by ds
CREATE TABLE T1(a string, b string) PARTITIONED BY (ds string);
CREATE TABLE T2(a string, b string) PARTITIONED BY (ds string);
ALTER TABLE T1 ADD PARTITION (ds='1');
--Move partition from T1 to T2
ALTER TABLE T2 EXCHANGE PARTITION (ds='1') WITH TABLE T1;
Example Usage – 부분 파티션 속성(여러 파티션 교환)
--Create two tables with multiple partition columns.
CREATE TABLE T1 (a string, b string) PARTITIONED BY (ds string, hr string);
CREATE TABLE T2 (a string, b string) PARTITIONED BY (ds string, hr string);
ALTER TABLE T1 ADD PARTITION (ds = '1', hr = '00');
ALTER TABLE T1 ADD PARTITION (ds = '1', hr = '01');
ALTER TABLE T1 ADD PARTITION (ds = '1', hr = '03');
--Alter the table, moving all the three partitions data where ds='1' from table T1 to table T2 (ds=1)
ALTER TABLE T2 EXCHANGE PARTITION (ds='1') WITH TABLE T1;
Example Usage – 다중 파티션 열이있는 파티션 속성 새로 생성 된 파티션 T2 (ds = 1)에 대해 T1의 스키마가 사용됩니 다. T1의 모든 파티션이 생성되거나 전체 작업이 실패합니다. T1의 모든 파티션이 삭제됩니다.
-- Create two tables with multiple partition columns.
CREATE TABLE T1 (a int) PARTITIONED BY (d1 int, d2 int);
CREATE TABLE T2 (a int) PARTITIONED BY (d1 int, d2 int);
ALTER TABLE T1 ADD PARTITION (d1=1, d2=2);
-- Alter the table, moving partition data d1=1, d2=2 from table T1 to table T2
ALTER TABLE T2 EXCHANGE PARTITION (d1 = 1, d2 = 2) WITH TABLE T1;