Apache Hive เป็นระบบ Data Warehousing ที่สร้างบน Hadoop สำหรับ Analytics และ MapReduce Jobs Partitioning แบ่งชุดข้อมูลขนาดใหญ่เป็นส่วนเล็กๆ เพื่อคิวรีเร็วขึ้น Dynamic Partitioning กำหนดค่า Partition จากข้อมูลที่ Insert อัตโนมัติ ต่างจาก Static Partitioning ที่ระบุค่าเอง
Static vs Dynamic Partitioning
| คุณสมบัติ | Static Partitioning | Dynamic Partitioning |
|---|---|---|
| ค่า Partition | ระบุด้วยตนเองต่อ Insert | สร้างอัตโนมัติจากข้อมูล |
| เหมาะสำหรับ | Partition ที่รู้จักน้อย | Partition เยอะหรือไม่รู้ค่า |
| WHERE Clause | จำเป็น | ไม่จำเป็น |
| ความยืดหยุ่น | ต่ำ | สูง |
เปิดใช้งาน Dynamic Partitioning
SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;
ตัวอย่างครบถ้วน
สร้าง Source Table, โหลดข้อมูล, แล้ว Partition แบบ Dynamic
-- 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 สร้างไดเรกทอรี Partition อัตโนมัติตามค่า country ที่แตกต่างใน Source Data
จัดการ Partitions
-- 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');
สรุป
Dynamic Partitioning ใน Hive สร้าง Partition จากค่าข้อมูลระหว่าง INSERT อัตโนมัติ ทำให้ไม่ต้องระบุ Partition แต่ละตัวด้วยตนเอง เหมาะสำหรับชุดข้อมูลขนาดใหญ่ที่มีค่า Partition แตกต่างมาก เพิ่มประสิทธิภาพคิวรีผ่าน Partition Pruning ลดความพยายามด้วยตนเอง
