아파치 하이브 파티션
IT 위키
AlanTuring (토론 | 기여)님의 2025년 3월 7일 (금) 07:34 판 (새 문서: Apache Hive의 파티션(Partition)은 테이블을 특정 컬럼 값을 기준으로 나누어 저장하는 기능으로, 대규모 데이터를 효율적으로 관리하고 쿼리 성능을 최적화하는 데 사용된다. ==개요== Hive에서 파티션은 테이블의 데이터를 특정 기준(예: 날짜, 지역 등)으로 구분하여 HDFS 디렉터리 구조로 저장하는 방식이다. 이를 통해 특정 파티션만 검색하여 성능을 향상시킬 수 있다. *...)
Apache Hive의 파티션(Partition)은 테이블을 특정 컬럼 값을 기준으로 나누어 저장하는 기능으로, 대규모 데이터를 효율적으로 관리하고 쿼리 성능을 최적화하는 데 사용된다.
1 개요[편집 | 원본 편집]
Hive에서 파티션은 테이블의 데이터를 특정 기준(예: 날짜, 지역 등)으로 구분하여 HDFS 디렉터리 구조로 저장하는 방식이다. 이를 통해 특정 파티션만 검색하여 성능을 향상시킬 수 있다.
- 파티션 키(Partition Key) - 데이터를 분할하는 기준이 되는 컬럼.
- 파티션 디렉터리 - HDFS 내에서 파티션 값별로 데이터가 저장되는 디렉터리.
2 파티션 테이블 생성[편집 | 원본 편집]
Hive에서 파티션을 사용하려면, 테이블을 생성할 때 PARTITIONED BY 절을 사용하여 지정해야 한다.
2.1 단일 컬럼 파티션[편집 | 원본 편집]
CREATE TABLE sales (
order_id INT,
amount DOUBLE
) PARTITIONED BY (year INT)
STORED AS PARQUET;
- year 컬럼을 기준으로 데이터를 파티션별로 저장.
- 데이터는 HDFS에 다음과 같은 구조로 저장됨.
/user/hive/warehouse/sales/
├── year=2022/
│ ├── part-0000.snappy.parquet
│ ├── part-0001.snappy.parquet
│
├── year=2023/
│ ├── part-0000.snappy.parquet
│ ├── part-0001.snappy.parquet
2.2 다중 컬럼 파티션[편집 | 원본 편집]
CREATE TABLE sales_data (
order_id INT,
amount DOUBLE
) PARTITIONED BY (year INT, month STRING)
STORED AS ORC;
- 데이터는 HDFS에 다음과 같은 디렉터리 구조로 저장됨.
/user/hive/warehouse/sales_data/
├── year=2022/
│ ├── month=01/
│ │ ├── part-0000.orc
│ │ ├── part-0001.orc
│ ├── month=02/
│ │ ├── part-0000.orc
│ │ ├── part-0001.orc
│
├── year=2023/
│ ├── month=01/
│ │ ├── part-0000.orc
│ │ ├── part-0001.orc
3 파티션 추가 및 데이터 삽입[편집 | 원본 편집]
Hive에서는 파티션을 명시적으로 추가해야 하며, 데이터를 삽입할 때 해당 파티션 값을 지정해야 한다.
3.1 파티션 추가[편집 | 원본 편집]
ALTER TABLE sales ADD PARTITION (year=2023) LOCATION '/data/sales/2023';
3.2 파티션에 데이터 삽입[편집 | 원본 편집]
INSERT INTO TABLE sales PARTITION (year=2023) VALUES (1, 100.50);
4 동적 파티션(Dynamic Partition)[편집 | 원본 편집]
Hive에서는 정적인 파티션(Static Partition) 외에도 동적 파티션(Dynamic Partition)을 지원한다. 이는 여러 개의 파티션을 한 번의 INSERT 쿼리로 생성할 때 사용된다.
4.1 동적 파티션 활성화[편집 | 원본 편집]
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
4.2 동적 파티션 삽입[편집 | 원본 편집]
INSERT INTO TABLE sales_data PARTITION (year, month)
SELECT order_id, amount, year, month FROM raw_sales;
- 기존 테이블(raw_sales)에서 데이터를 읽어 자동으로 파티션을 생성하여 삽입.
5 파티션 데이터 조회[편집 | 원본 편집]
파티션을 사용하면 특정 데이터를 빠르게 조회할 수 있다.
SELECT * FROM sales WHERE year = 2023;
- Hive는 파티션 프루닝(Partition Pruning)을 수행하여 year=2023 파티션만 검색하여 성능을 향상시킴.
6 파티션 삭제[편집 | 원본 편집]
특정 파티션을 삭제할 수도 있다.
ALTER TABLE sales DROP PARTITION (year=2023);
- 해당 파티션에 있는 데이터도 함께 삭제됨.
7 파티션의 장점 및 단점[편집 | 원본 편집]
7.1 장점[편집 | 원본 편집]
- 특정 파티션만 검색하여 쿼리 속도를 향상시킴.
- HDFS에서 데이터를 논리적으로 분리하여 관리 가능.
- 대용량 데이터셋을 효과적으로 분할하여 저장.
7.2 단점[편집 | 원본 편집]
- 너무 많은 파티션을 생성하면 메타데이터 관리 부담 증가.
- 작은 파일이 많아지면 HDFS의 성능 저하 가능.
- 동적 파티션 사용 시 삽입 성능 저하 가능.