Big Data/Hive

Partition (2)

chmono 2022. 10. 25. 13:26

Partition

Hive에는 Internal table, External Table 두 종류가 있으며

테이블내 데이터를 partiton 단위로 insert가 가능하다.

 

Internal Table에 partiton 데이터를 Insert 하는 방법은 아래와 같다.

INSERT INTO TABLE logs
PARTITION (year=2022, month=10, day=25)
SELECT * FROM staged_logs
WHERE year=2022 AND month=10 AND day=25;

 

데이터를 overwrite 할 때는 아래와 같이 데이터를 insert하면 된다.

INSERT OVERWRITE TABLE logs
PARTITION (year=20122, month=10, day=25)
SELECT * FROM staged_logs
WHERE year=2022 AND month=10 AND day=25;

 

External table에 데이터를 삽입할 때도 같은 방식으로 실행하면 된다.

 

 

 

Dynamic Partition

이렇게 하나하나 partition을 생성하지 않고 여러개의 동적 partition 생성도 가능하다.

우선 아래의 설정을 실행시켜주어야 한다.

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

 

동적 partition 데이터를 overwrite 방식으로 삽입할 때는, Select 문의 마지막 field에 partition key들을 넣어주어야한다.

INSERT OVERWRITE TABLE logs
PARTITION (year, month, day)
SELECT ..., year, month, day 
FROM staged_logs

 

참고로 External Table을 생성할 때는 Select문을 활용하여 생성이 불가하다.

이미 해당 데이터 파일이 존재하기 때문이다.

(굳이 또 external table 을 만드는데 데이터를 복사해 생성할 필요 없다는 의미)

따라서 Alter Table ~ Add Partition~ 을 수행해주면 된다.

ALTER TABLE logs2
ADD PARTITION (
year=2022, month=10, day=25)
LOCATION '/logs2/2022/10/25';

 

디렉토리 경로를 지정해 데이터 삽입도 가능하다.

INSERT OVERWRITE LOCAL
DIRECTORY '/tmp/results'
SELECT ... FROM ...;

 

 

 

Alter Partition

  •   Add Partition
ALTER TABLE tablename ADD [IF NOT EXISTS]
PARTITION (col1=val1, ...) LOCATION 'path1'
PARTITION (cola=vala, ...) LOCATION 'path2';

 

 

  •   Drop Partition
ALTER TABLE tablename
DROP [IF EXISTS]
PARTITION (col1=val1, ...),
PARTITION (col1=val1, ...);

 

  • New Location
ALTER TABLE tablename
[PARTITION spec]
SET LOCATION 'new_loc';