2023.06.14 (Wed) ํ์ต์ ๋ฆฌ
#Hive #Partition
1. Partition
ํํฐ์ ๋์ผ๋ก ํ ์ด๋ธ์ ๋ถํ ํ์ฌ ์ ์ฒด ํ์์ด ์๋ hierarchical๊ตฌ์กฐ๋ก ํ์ํจ์ผ๋ก์จ ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅ
ex) ๋ ์ง ๋ณ๋ก ํํฐ์ ๋ํ์ฌ ์ ์ฒด ํ ์ด๋ธ์์ ํน์ ๋ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์
partitioning ๋ฐฉ์์๋ ์๋์ ๊ฐ์ 2๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌ
| ์ ์ ํํฐ์
(Static Partition) |
data๋ฅผ insert ํ ๋ ์ด๋ค partition์ data๋ฅผ insertํ ์ง ๋ช ์ |
| ๋์ ํํฐ์
(Dynamic Partition) |
data๋ฅผ insert ํ ๋ partition ๋ช ์๋ฅผ ํ์ง ์์๋ ์๋์ผ๋ก partition ์ด ๋๋์ด์ง |
1-1. ์ ์ ํํฐ์ (Static Partition)
partition table์ ์๋ก์ด data๋ฅผ insert ํ ๋, INSERT๋ฌธ์ partition ๊ฐ์ ๊ณ ์ ๋ ๊ฐ์ผ๋ก ํจ๊ป ๋ช ์ํด์ผํจ
ใด ์๋ ์์์ ๊ฐ์ด INSERT๋ฌธ์์ partition ๊ฐ์ ๊ณ ์ ๋ ๊ฐ '20230601'์ ๋ช ์
๐ ์ ์ ํํฐ์ ํ ์ด๋ธ ์์ฑ ์์
CREATE TABLE partition_tb(
a STRING
b STRING)
PARTITIONED BY (date STRING);
INSERT INTO TABLE partition_tb(date='20230601')
SELECT a, b FROM raw_tb;
1-2. ๋์ ํํฐ์ (Dynamic Partition)
partition table์ ์๋ก์ด data๋ฅผ insert ํ ๋, INSERT๋ฌธ์ ๊ณ ์ ๋ partition ๊ฐ์ ๋ช ์ํ์ง ์๋ ๋์ partition ์ ๋ณด๋ฅผ ์กฐํํ๋ column์ ์ถ๊ฐํ์ฌ ์ ๋ฌ (๋จ, column ์ค ๊ฐ์ฅ ๋ง์ง๋ง์ partition column์ ์์น)
ใด ์๋ ์์์ ๊ฐ์ด INSERT๋ฌธ์์ date ์ปฌ๋ผ์ ํจ๊ผ ์ ๋ฌ
hive์์ ๋์ partition์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ๊ธฐ๋ณธ setting์ด ํ์
- ๊ธฐ๋ณธ ์ค์
set hive.exec.dynamic.partition = ture; # hive์์ ๋์ partition ์ํ o
set hive.exec.dynamic.partition = false; # default : hive์์ ๋์ partition ์ํ x
- partition key ์๋์์ฑ
hive์์๋ ๋์ ํ์ด์ ๋จ๋ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ผ๋ฏ๋ก ๋์ ํ์ด์ ๋ง์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ nonstrict ์ค์ ๅฟ
set hive.exec.dynamic.partition.mode = nonstrict; # partition key ์๋ ์์ฑ
set hive.exec.dynamic.partition.mode = strict; # default : ์ต์ 1๊ฐ ์ด์์ static partition ๅฟ
- ์ต๋ partition key ๊ฐ์
set hive.exec.max.dynamic.partitions = 1000;
# default : 200, partition key๋ก ์ฌ์ฉํ column์ unique value๋ฅผ ํ์ธ ํ ์ค์
- tezfile merge
์์ ์ฌ์ด์ฆ์ ํ์ผ์ด ๋ง์ด ์์ฑ๋๋ฉด HDFS์ ๋ถ๋ด์ด ๋ ์ ์์ผ๋ฏ๋ก ์ผ๋ถ file merge
set hive.merge.tezfiles = true;
# tez ์์
ํ ๋๋ฌด ์์ ํฌ๊ธฐ์ file๋ค์ merge ์งํ
๐ ๋์ ํํฐ์ ํ ์ด๋ธ ์์ฑ ์์
CREATE TABLE partition_tb(
a STRING
b STRING)
PARTITIONED BY (date STRING);
INSERT INTO TABLE partition_tb(date)
SELECT a, b, date FROM raw_tb;
2. Partition ์กฐํ/์์ /์ญ์ ๋ช ๋ น์ด
2-1. Hadoop ๋ช ๋ น์ด
Hadoop์ ์์ฑ๋ partition ํด๋ ํ์ธํ๊ธฐ
# hdfs dfs -ls /๊ฒฝ๋ก/partittion_tb/date=20230601/
hdfs dfs -ls /user/hive/warehouse/partittion_tb/date=20230601/
# ์ฐธ๊ณ ์ฌํญ - table ์ด๋ฆ์ผ๋ก ๊ฒ์ํ๊ธฐ
hdfs dfs -ls -R / | grep table_name
2-2. Hive ๋ช ๋ น์ด
- table ์ ๋ณด ํ์ธ
DESCRIBE FORMATTED table_name;
- partition ์กฐํ
show partitions table_name;
- partition ์กฐ๊ฑด ๊ฒ์
select * from partiton_tb where date='20230601';
- partition ์ถ๊ฐ
ALTER TABLE partition_tb ADD PARTITION (date='20230610');
- partition ์ญ์
ALTER TABLE partition-tb DROP PARTITION (date='20230610');'๐ Data > Engineering' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Zeppelin / Spark] ubuntu ํ๊ฒฝ์์ Apache Zeppelin / Spark ์ค์นํ๊ธฐ (0) | 2023.06.20 |
|---|---|
| [Pig] Pig ์ค์น ๋ฐ ๊ฐ์ (0) | 2023.06.13 |
| [Airflow] HiveServer2Hook, HiveCliHook ์ฌ์ฉํ์ฌ Hive์ ์ ๊ทผํ๊ธฐ (0) | 2023.06.12 |
| [Airflow] Airflow์ Python Operator / Hive Operator ์ฌ์ฉํ๊ธฐ (0) | 2023.06.09 |
| [Sqoop] Sqoop ์ค์น ๋ฐ ๊ฐ์ (0) | 2023.06.08 |