Apache Hive는 분석 및 MapReduce 작업을 위해 Hadoop을 기반으로 구축된 데이터 웨어하우징 시스템입니다. 분할은 더 빠른 쿼리를 위해 대규모 데이터 세트를 더 작은 부분으로 나눕니다. 동적 파티셔닝은 값을 수동으로 지정하는 정적 파티셔닝과 달리 삽입되는 데이터에서 파티션 값을 자동으로 결정합니다.
정적 파티셔닝과 동적 파티셔닝
동적 파티션 활성화
SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;
전체 예
소스 테이블을 생성하고 데이터를 로드한 후 동적으로 분할하시겠습니까?
-- Step 1: Create source table CREATE TABLE sales_raw ( id INT, product STRING, amount DOUBLE, sale_date STRING, country STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; -- Step 2: Load data LOAD DATA LOCAL INPATH '/home/data/sales.csv' INTO TABLE sales_raw; -- Step 3: Create partitioned table CREATE TABLE sales_partitioned ( id INT, product STRING, amount DOUBLE, sale_date STRING ) PARTITIONED BY (country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; -- Step 4: Insert with dynamic partitioning INSERT INTO TABLE sales_partitioned PARTITION (country) SELECT id, product, amount, sale_date, country FROM sales_raw;
Hive는 고유한 country를 기반으로 파티션 디렉터리를 자동으로 생성합니다. 소스 데이터의 값입니다.
파티션 관리
-- View partitions SHOW PARTITIONS sales_partitioned; -- Query specific partition (partition pruning) SELECT * FROM sales_partitioned WHERE country = 'India'; -- Drop a partition ALTER TABLE sales_partitioned DROP PARTITION (country = 'India');
결론
Hive의 동적 파티셔닝은 INSERT 중에 데이터 값에서 파티션을 자동으로 생성하므로 각 파티션을 수동으로 지정할 필요가 없습니다. 고유한 파티션 값이 많은 대규모 데이터 세트에 이상적이며 수동 작업을 줄이면서 파티션 정리를 통해 쿼리 성능을 향상시킵니다.