Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL

Làm chủ Hive Dynamic Partitioning: Phân đoạn dữ liệu tự động cho truy vấn nhanh hơn

Apache Hive là một hệ thống kho dữ liệu được xây dựng trên Hadoop cho phân tích và công việc MapReduce. Phân vùng chia tập dữ liệu lớn thành các phần nhỏ hơn để truy vấn nhanh hơn. Dynamic partitioning (phân vùng động) tự động xác định giá trị phân vùng từ dữ liệu được chèn, khác với static partitioning (phân vùng tĩnh) nơi giá trị được chỉ định thủ công.

Static vs Dynamic Partitioning

Tính năng Static Partitioning Dynamic Partitioning
Giá trị phân vùng Chỉ định thủ công mỗi lần insert Tự động suy ra từ dữ liệu
Phù hợp cho Ít phân vùng đã biết Nhiều hoặc phân vùng không xác định
Mệnh đề WHERE Bắt buộc Không bắt buộc
Linh hoạt Thấp Cao

Bật Dynamic Partitioning

SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

Ví dụ hoàn chỉnh

Tạo bảng nguồn, tải dữ liệu, sau đó phân vùng động nó:

-- Bước 1: Tạo bảng nguồn
CREATE TABLE sales_raw (
  id INT, product STRING, amount DOUBLE, sale_date STRING, country STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

-- Bước 2: Tải dữ liệu
LOAD DATA LOCAL INPATH '/home/data/sales.csv' INTO TABLE sales_raw;

-- Bước 3: Tạo bảng phân vùng
CREATE TABLE sales_partitioned (
  id INT, product STRING, amount DOUBLE, sale_date STRING
) PARTITIONED BY (country STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

-- Bước 4: Insert với dynamic partitioning
INSERT INTO TABLE sales_partitioned PARTITION (country)
SELECT id, product, amount, sale_date, country FROM sales_raw;

Hive tự động tạo thư mục phân vùng dựa trên các giá trị country khác nhau trong dữ liệu nguồn.

Quản lý phân vùng

-- Xem phân vùng
SHOW PARTITIONS sales_partitioned;
-- Truy vấn phân vùng cụ thể (partition pruning)
SELECT * FROM sales_partitioned WHERE country = 'India';
-- Xóa một phân vùng
ALTER TABLE sales_partitioned DROP PARTITION (country = 'India');

Kết luận

Dynamic partitioning trong Hive tự động tạo phân vùng từ giá trị dữ liệu trong quá trình INSERT, loại bỏ nhu cầu chỉ định thủ công từng phân vùng. Nó lý tưởng cho tập dữ liệu lớn với nhiều giá trị phân vùng riêng biệt, cải thiện hiệu suất truy vấn thông qua partition pruning trong khi giảm nỗ lực thủ công.