하이브는 파일 기반 테이블을 사용하기 때문에 데이터 조회 시 모든 ROW 정보를 읽고 처리하는 방식이다. 따라서 데이터가 많아질수록 속도는 당연히 느려지게 된다. 이를 해결하기 위한 것이 Partition을 사용하는 것이다. 데이터를 저장할 때 특정 키 기준으로 파티션을 구성하면 해당 파티션만 읽기 때문에 데이터 처리 속도가 빨라지게 된다. 파티션은 데이터를 디렉터리로 분리하여 저장하고 파티션 컬럼을 hive query WHERE 조건에 컬럼처럼 사용할 수 있다.
파티션 테이블 생성
CREATE EXTERNAL TABLE partitionbychargingmode (
charging_station_name string,
address string,
charger_capacity string,
charge_amount string,
filling string,
charge_start_time timestamp,
charge_end_time timestamp
)
partitioned BY (
charging_mode string)
ROW format serde
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
stored AS inputformat
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
outputformat
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
location
'/user/hive/partitionbychargingmode';
위의 테이블은 charging_mode 컬럼을 기준으로 파티션을 생성한 테이블이다. 이제 데이터를 INSERT 해보자. 기존에 있던 테이블의 SELECT 결과를 INSERT 할 것이다. 기존 테이블은 CSVSerde를 이용해서 만든 테이블이다. 자세한 내용은 아래의 포스트를 참고하자.
2022.05.20 - [Hive] - OpenCSVSerde
OpenCSVSerde
하이브는 CSV 형식의 데이터를 하둡에서 읽을 수 있게 해주는 CSVSerde를 제공한다. 하이브를 설치하고 테스트해 볼 겸 OpenCSVSerde를 이용해서 테이블을 만들고 데이터 INSERT까지 해보려고 한다. 공공
heed159.tistory.com
데이터 삽입
INSERT overwrite table partitionbychargingmode PARTITION (charging_mode)
SELECT IF(csv.charging_station_name='', NULL, csv.charging_station_name),
IF (csv.address='', NULL, csv.address),
IF (csv.charger_capacity='', NULL, csv.charger_capacity),
IF (csv.charge_amount='', NULL, csv.charge_amount),
IF (csv.filling='', NULL, csv.filling),
IF (csv.charge_start_time='', NULL, csv.charge_start_time),
IF (csv.charge_end_time='', NULL, csv.charge_end_time),
csv.charging_mode
FROM csvserde_test csv;
charging_mode 컬럼을 기준으로 파티션을 생성해서 데이터를 넣어주었다.

파티션 조회
SHOW PARTITIONS partitionbychargingmode;
partition
charging_mode=급속
charging_mode=완속
hdfs 내에서도 해당 테이블이 파티션으로 나뉘어 저장되어 있는 것을 확인할 수 있다.
[hadoop@pb4 test]$ hdfs dfs -ls /user/hive/partitionbychargingmode
Found 2 items
drwxr-xr-x - hive hdfs 0 2022-05-26 09:55 /user/hive/partitionbychargingmode/charging_mode=급속
drwxr-xr-x - hive hdfs 0 2022-05-26 09:55 /user/hive/partitionbychargingmode/charging_mode=완속
'Hive' 카테고리의 다른 글
OpenCSVSerde (1) | 2022.05.20 |
---|---|
[Hive] Hive 3버전 특징 (0) | 2022.04.19 |
[Hive] Managed Table과 External Table (0) | 2022.04.19 |
[Hive]HiveServer2 와 Beeline (0) | 2022.03.16 |
[Hive] Hive 3.1.2 설치 (CentOS7, metastore - PostgreSQL) (0) | 2022.03.16 |