Apache Hive Index 정리
Hive에서 Index(색인) 는 테이블에서 데이터를 빠르게 검색할 수 있도록 도와주는 기능이다
일반적인 RDBMS의 인덱스와 비슷하지만, Hive는 대량의 데이터를 다루기 때문에 작동 방식이 약간 다르다.
1. Hive Index의 필요성
Hive는 기본적으로 테이블을 풀 스캔(Full Table Scan) 하기 때문에, 데이터 양이 많아지면 쿼리 속도가 느려질 수 있다.
Index를 사용하면 검색 범위를 줄여서 성능을 향상시킬 수 있다.
사용 예시:
- 특정 컬럼에 대한 빠른 조회
- WHERE 절을 자주 사용하는 컬럼 최적화
- 조인(Join) 성능 향상
2. Hive Index 종류
ex)
Compact Index | Hive 기본 제공 인덱스. 별도의 테이블에 인덱스 저장 | 단순 조회 최적화 |
Bitmap Index | Compact Index보다 효율적, 중복 데이터가 많을 때 유용 | 성별, 상태값 같은 범주형 데이터 |
Bloom Filter Index | 존재 여부를 빠르게 확인하는 인덱스 | 큰 테이블에서 특정 키가 있는지 검색할 때 |
3. Hive Index 생성 및 사용 방법
(1) Compact Index 생성
CREATE INDEX idx_customer_id ON TABLE orders (customer_id) AS 'COMPACT' WITH DEFERRED REBUILD;
- COMPACT: 기본 인덱스 타입
- WITH DEFERRED REBUILD: 인덱스를 나중에 생성
👉 인덱스 수동 생성(갱신)
ALTER INDEX idx_customer_id ON orders REBUILD;
(2) 인덱스가 저장된 테이블 확인
Hive에서는 인덱스가 별도의 테이블 형태로 저장
SHOW FORMATTED INDEX ON orders;
(3) 인덱스 삭제
DROP INDEX idx_customer_id ON orders;
4. Hive Index의 단점과 주의점
- Hive는 기본적으로 전체 테이블 스캔이 최적화되어 있기 때문에, 작은 데이터셋에서는 오히려 인덱스가 성능을 저하시킬 수 있다.
- 데이터가 자주 변경되는 경우 인덱스가 비효율적일 수 있다.
- Hive의 Partitioning과 Bucketing이 더 좋은 대안일 수도 있다.
- Partitioning: 특정 컬럼을 기준으로 테이블을 나누는 방식
- Bucketing: 특정 컬럼의 해시 값을 기반으로 데이터를 그룹화
👉 대용량 데이터에서는 Partitioning과 Bucketing을 먼저 고려하고, 정말 필요한 경우에만 Index 사용을 추천!
5. Partitioning과 Index 비교
Partitioning | 큰 데이터셋에서 검색 성능 향상 | 작은 데이터에는 비효율적 | 날짜별 로그 데이터 |
Bucketing | 조인(Join) 성능 향상 | 해시 기반으로 나누기 때문에 범위 검색에 비효율적 | 동일 키 값 그룹화 |
Indexing | WHERE 조건 검색 최적화 | 유지보수 비용 높음, 일부 쿼리에서 비효율적 | 특정 컬럼 검색 속도 향상 |
'DB' 카테고리의 다른 글
DB - Hive (msck repair table) (0) | 2025.02.16 |
---|---|
DB - partition 접근 (0) | 2025.02.16 |
Hive - UDF (2) | 2025.02.02 |
Hive - HQL 함수 (0) | 2025.02.02 |
SQL - begin, index, anti-join (0) | 2025.01.19 |