아파치 하이브 파티션

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의 성능 저하 가능.
  • 동적 파티션 사용 시 삽입 성능 저하 가능.

8 같이 보기[편집 | 원본 편집]