달나라 노트

Hive : hive.exec.dynamic.partition (동적 partition, 정적 partition, dynamic partition, static partition) 본문

SQL/Apache Hive

Hive : hive.exec.dynamic.partition (동적 partition, 정적 partition, dynamic partition, static partition)

CosmosProject 2021. 6. 4. 02:42
728x90
반응형

 

 

 

Hive에서도 partition table을 생성/관리할 수 있습니다.

이 때 아래 2가지의 partitioning 방식이 존재합니다.

 

정적 파티션 (Static partition)

동적 파티션 (Dynamic partition)

 

 

 

먼저 정적 파티션과 동적 파티션이 뭔지 알아봅시다.

 

 

 

 

정적 파티션(Static partition)

정적(Static)이라는 말처럼 static partition으로 table을 관리하는 경우에는

해당 partition table에 새로운 data를 insert할 때 어떤 partition에 data를 insert할지를 명시해줘야 합니다.

 

insert into test_table partition (basis_date = '20210325')
select *
from source_table
--
where basis_date = '20210325'
;


insert into test_table partition (basis_date = '20210326')
select *
from source_table
--
where basis_date = '20210326'
;

위 예시를 보면 source_table에서 특정 basis_date를 가진 data들을 test_table에 insert하고 있습니다.

 

이 과정에서 test_table의 어느 partition에 넣을지를 partitoin (~~~)의 형태로 전달하는걸 알 수 있죠.

 

 

show partitions test_table;

위처럼 test_table의 partition을 확인할 수 있습니다.

 

 

 

 

동적 파티션(Dynamic partition)

동적 partition은 정적 partition과는 다르게 table에 data를 insert할 때 따로 partition명시를 하지 않아도 알아서 partition이 나뉘기 때문에 partition 관리에 편리하다는 장점이 있습니다.

 

단점은 그렇게 큰 data가 아님에도 불구하고 새로운 partition을 차지하여 작은 partition들이 너무 많이 생길 수 있다는 것입니다.

이런 경우 scaning이 좀 느려질 수 있습니다.

 

동적 partition을 사용하기 위해선 hive의 setting값을 설정해줘야하는데 관련 내용을 살펴봅시다.

 

 

set hive.exec.dynamic.partition = ture;
set hive.exec.dynamic.partition = false;

true -> hive에서 동적 partition을 수행할 수 있도록 함.
false -> hive에서 동적 partition을 수행하지 못하도록 함.
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.exec.dynamic.partition.mode = strict;

nonstrict -> Partition key가 자동으로 생성됨.
strict -> 최소 1개 이상의 static partition이 있어야 함.
set hive.exec.max.dynamic.partitions = 500;

dynamic partition으로 생성될 수 있는 최대 partition 개수를 설정함.
set hive.merge.tezfiles = true;

tez 작업 후 너무 작은 크기의 file들은 merge 진행.

 

 

참고

위같은 option은 그냥 쿼리돌리듯이 돌리면 설정됩니다.

Apache Hive document = https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Tez

 

Configuration Properties - Apache Hive - Apache Software Foundation

 

cwiki.apache.org

 

 

 

 

 

 

 

728x90
반응형
Comments