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.