Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

Hive 동적 분할 마스터하기:더 빠른 쿼리를 위한 자동 데이터 분할

Apache Hive는 분석 및 MapReduce 작업을 위해 Hadoop을 기반으로 구축된 데이터 웨어하우징 시스템입니다. 분할은 더 빠른 쿼리를 위해 대규모 데이터 세트를 더 작은 부분으로 나눕니다. 동적 파티셔닝은 값을 수동으로 지정하는 정적 파티셔닝과 달리 삽입되는 데이터에서 파티션 값을 자동으로 결정합니다.

정적 파티셔닝과 동적 파티셔닝

기능 정적 파티셔닝 동적 파티셔닝 파티션 값삽입당 수동으로 지정데이터에서 자동으로 파생됨최적 알려진 소수의 파티션다수 또는 알 수 없는 파티션WHERE 절필수필요하지 않음유연성낮음높음

동적 파티션 활성화

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 중에 데이터 값에서 파티션을 자동으로 생성하므로 각 파티션을 수동으로 지정할 필요가 없습니다. 고유한 파티션 값이 많은 대규모 데이터 세트에 이상적이며 수동 작업을 줄이면서 파티션 정리를 통해 쿼리 성능을 향상시킵니다.

Hive 동적 분할 마스터하기:더 빠른 쿼리를 위한 자동 데이터 분할