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';