Hive 인덱싱
Hive 인덱싱 (LanguageManual Indexing)
Hive 인덱스는 테이블 특정 컬럼에 대한 조회 속도를 높이기 위한 기능이었어요. 하지만 버전 3.0부터 제거되었으므로, 다음과 같은 대안 옵션을 사용할 수 있습니다.
출처: 문서
본문
3.0부터 인덱싱 제거됨 (Indexing Is Removed since 3.0)
인덱싱과 비슷하게 동작할 수 있는 대안 옵션들이 있어요.
- 자동 재작성(automatic rewriting)이 있는 구체화된 뷰(materialized views)는 매우 비슷한 결과를 낼 수 있어요. Hive 2.3.0부터 materialized view를 지원합니다.
- 컬럼형 파일 포맷(Parquet, ORC) 사용 – 선택적 스캔(selective scanning)이 가능하며, 전체 파일이나 블록을 건너뛸 수도 있어요.
인덱싱은 버전 3.0에서 제거되었습니다 (HIVE-18448).
Hive 인덱스 개요 (Overview of Hive Indexes)
Hive 인덱싱의 목표는 테이블의 특정 컬럼에 대한 조회 속도를 높이는 것이에요. 인덱스가 없으면 WHERE tab1.col1 = 10 같은 조건이 있는 쿼리는 전체 테이블이나 파티션을 로드해 모든 행을 처리합니다. 하지만 col1에 인덱스가 있으면 파일의 일부만 로드·처리하면 돼요.
인덱스가 제공하는 조회 속도 향상은 인덱스를 만들기 위한 추가 처리와 저장 공간이라는 비용을 수반해요.
버전 (Versions)
Hive 인덱싱은 버전 0.7.0에 추가되었고, 비트맵 인덱싱은 버전 0.8.0에 추가되었어요.
인덱스 리소스 (Indexing Resources)
Documentation 및 예시:
- Indexes – design document (HIVE-417부터 현재 상태의 indexing JIRAs 목록)
- Create/Drop/Alter Index – HiveQL Language Manual DDL
- Show Indexes – HiveQL Language Manual DDL
- Bitmap indexes – Hive 버전 0.8.0에 추가 (HIVE-1803)
- Indexed Hive – Prafulla Tekawade와 Nikhil Deshpande의 개요·예시, 2010년 10월
- Tutorial: SQL-like join and index with MapReduce using Hadoop and Hive – Ashish Garg의 블로그, 2012년 4월
Hive 인덱스용 구성 파라미터 (Configuration Parameters for Hive Indexes)
Configuration Properties 문서가 인덱스를 구성하는 파라미터를 설명합니다.
간단한 예시 (Simple Examples)
Hive 테스트 스위트에서 가져온 인덱싱 예시입니다.
대소문자 구분 (Case sensitivity)
Hive 0.12.0 이하 릴리스에서는 CREATE INDEX와 DROP INDEX 문에 대해 인덱스 이름이 대소문자를 구분해요. 하지만 ALTER INDEX는 소문자로 만든 인덱스 이름을 요구합니다 (HIVE-2752 참고). 이 버그는 Hive 0.13.0에서 모든 HiveQL 문에 대해 인덱스 이름을 대소문자 구분 없이 만들면서 수정됐어요. 0.13.0 이전 릴리스에서는 모든 인덱스 이름에 소문자를 쓰는 것이 모범 사례입니다.
인덱스 생성/빌드, show, drop:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT';
SHOW INDEX ON table01;
DROP INDEX table01_index ON table01;
생성 후 빌드, formatted(컬럼 이름 포함)로 show, drop:
CREATE INDEX table02_index ON TABLE table02 (column3) AS 'COMPACT' WITH DEFERRED REBUILD;
ALTER INDEX table02_index ON table2 REBUILD;
SHOW FORMATTED INDEX ON table02;
DROP INDEX table02_index ON table02;
비트맵 인덱스 생성, 빌드, show, drop:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD;
ALTER INDEX table03_index ON table03 REBUILD;
SHOW FORMATTED INDEX ON table03;
DROP INDEX table03_index ON table03;
새 테이블에 인덱스 생성:
CREATE INDEX table04_index ON TABLE table04 (column5) AS 'COMPACT' WITH DEFERRED REBUILD IN TABLE table04_index_table;
RCFile로 저장되는 인덱스 생성:
CREATE INDEX table05_index ON TABLE table05 (column6) AS 'COMPACT' STORED AS RCFILE;
텍스트 파일로 저장되는 인덱스 생성:
CREATE INDEX table06_index ON TABLE table06 (column7) AS 'COMPACT' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
인덱스 속성과 함께 생성:
CREATE INDEX table07_index ON TABLE table07 (column8) AS 'COMPACT' IDXPROPERTIES ("prop1"="value1", "prop2"="value2");
테이블 속성과 함께 생성:
CREATE INDEX table08_index ON TABLE table08 (column9) AS 'COMPACT' TBLPROPERTIES ("prop3"="value3", "prop4"="value4");
존재할 경우 drop:
DROP INDEX IF EXISTS table09_index ON table09;
파티션의 인덱스 재빌드:
ALTER INDEX table10_index ON table10 PARTITION (columnX='valueQ', columnY='valueR') REBUILD;
더 알아보기 (Learn more)
인덱스 자체는 3.0부터 제거됐지만, 그 목적(특정 컬럼 조회 가속화)은 물리화된 뷰와 컬럼형 파일 포맷으로 대체됐어요. 살아있는 프로젝트라면 materialized view + 자동 재작성 조합이 현재의 표준 접근법입니다.