Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

เชี่ยวชาญ Hive Dynamic Partitioning: การแบ่งข้อมูลอัตโนมัติสำหรับคิวรีที่เร็วขึ้น

Apache Hive เป็นระบบ Data Warehousing ที่สร้างบน Hadoop สำหรับ Analytics และ MapReduce Jobs Partitioning แบ่งชุดข้อมูลขนาดใหญ่เป็นส่วนเล็กๆ เพื่อคิวรีเร็วขึ้น Dynamic Partitioning กำหนดค่า Partition จากข้อมูลที่ Insert อัตโนมัติ ต่างจาก Static Partitioning ที่ระบุค่าเอง

Static vs Dynamic Partitioning

คุณสมบัติStatic PartitioningDynamic 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 ลดความพยายามด้วยตนเอง

เชี่ยวชาญ Hive Dynamic Partitioning: การแบ่งข้อมูลอัตโนมัติสำหรับคิวรีที่เร็วขึ้น