Apache Hive คือระบบคลังข้อมูลที่สร้างขึ้นบน Hadoop สำหรับการวิเคราะห์และงาน MapReduce การแบ่งพาร์ติชันจะแบ่งชุดข้อมูลขนาดใหญ่ออกเป็นส่วนเล็กๆ เพื่อการสืบค้นที่รวดเร็วยิ่งขึ้น การแบ่งพาร์ติชันแบบไดนามิกจะกำหนดค่าพาร์ติชันจากข้อมูลที่ถูกแทรกโดยอัตโนมัติ ซึ่งแตกต่างจากการแบ่งพาร์ติชันแบบคงที่ซึ่งมีการระบุค่าด้วยตนเอง
การแบ่งพาร์ติชันแบบคงที่และแบบไดนามิก
การเปิดใช้งานการแบ่งพาร์ติชันแบบไดนามิก
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 ซึ่งไม่จำเป็นต้องระบุแต่ละพาร์ติชันด้วยตนเอง เหมาะอย่างยิ่งสำหรับชุดข้อมูลขนาดใหญ่ที่มีค่าพาร์ติชั่นที่แตกต่างกันจำนวนมาก ปรับปรุงประสิทธิภาพการสืบค้นผ่านการตัดพาร์ติชั่นในขณะที่ลดความพยายามด้วยตนเอง