พาร์ทิชันไฮฟ์และถังพร้อมตัวอย่าง
ตาราง พาร์ติชัน และบัคเก็ตเป็นส่วนหนึ่งของการสร้างแบบจำลองข้อมูล Hive
พาร์ติชั่นคืออะไร?
Hive Partitions เป็นวิธีจัดระเบียบตารางออกเป็นพาร์ติชั่นโดยการแบ่งตารางออกเป็นส่วนต่างๆ ตามคีย์พาร์ติชั่น
พาร์ติชั่นมีประโยชน์เมื่อตารางมีคีย์พาร์ติชั่นตั้งแต่หนึ่งคีย์ขึ้นไป คีย์พาร์ติชั่นเป็นองค์ประกอบพื้นฐานสำหรับกำหนดวิธีจัดเก็บข้อมูลในตาราง
ตัวอย่างเช่น: -
“ลูกค้ามีข้อมูลอีคอมเมิร์ซบางส่วนที่เป็นของการดำเนินการในอินเดีย ซึ่งการดำเนินการแต่ละรัฐ (38 รัฐ) กล่าวถึงทั้งหมด หากเราใช้คอลัมน์รัฐเป็นคีย์พาร์ติชัน และดำเนินการพาร์ติชันบนข้อมูลอินเดียทั้งหมด เราจะได้จำนวนพาร์ติชัน (38 พาร์ติชัน) ซึ่งเท่ากับจำนวนรัฐ (38) ที่มีอยู่ในอินเดีย โดยสามารถดูข้อมูลแต่ละรัฐแยกกันในตารางพาร์ติชันได้
ตัวอย่างโค้ดสำหรับพาร์ติชัน
- การสร้างตารางทุกรัฐ
create table all states(state string, District string,Enrolments string) row format delimited fields terminated by ',';
- กำลังโหลดข้อมูลลงในตารางที่สร้างทุกสถานะ
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
- การสร้างตารางพาร์ทิชัน
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
- สำหรับพาร์ติชันเราต้องตั้งค่าคุณสมบัตินี้
set hive.exec.dynamic.partition.mode=nonstrict
- กำลังโหลดข้อมูลลงในตารางพาร์ติชัน
INSERT OVERWRITE TABLE state_part PARTITION(state) SELECT district,enrolments,state from allstates;
- การประมวลผลจริงและการสร้างตารางพาร์ติชั่นตามสถานะเป็นพาร์ติชั่นคีย์
- จะมีเอาต์พุตพาร์ติชัน 38 รายการในที่เก็บข้อมูล HDFS โดยมีชื่อไฟล์เป็นชื่อสถานะ เราจะตรวจสอบสิ่งนี้ในขั้นตอนนี้
ภาพหน้าจอต่อไปนี้จะแสดงการดำเนินการของโค้ดที่กล่าวถึงข้างต้น
จากโค้ดด้านบนเราทำสิ่งต่อไปนี้
- การสร้างตารางรัฐทั้งหมดด้วยชื่อคอลัมน์ 3 ชื่อ เช่น รัฐ เขต และการลงทะเบียน
- กำลังโหลดข้อมูลลงในตารางทุกสถานะ
- การสร้างตารางพาร์ติชันที่มีสถานะเป็นคีย์พาร์ติชัน
- ในขั้นตอนนี้ การตั้งค่าโหมดพาร์ติชันเป็นแบบไม่เข้มงวด (โหมดนี้จะเปิดใช้งานโหมดพาร์ติชันแบบไดนามิก)
- กำลังโหลดข้อมูลลงในพาร์ติชัน tablestate_part
- การประมวลผลจริงและการสร้างตารางพาร์ติชั่นตามสถานะเป็นพาร์ติชั่นคีย์
- จะมีเอาต์พุตพาร์ติชัน 38 รายการในที่เก็บข้อมูล HDFS โดยมีชื่อไฟล์เป็นชื่อสถานะ เราจะตรวจสอบสิ่งนี้ในขั้นตอนนี้ ในขั้นตอนนี้ เราจะเห็นเอาต์พุตของพาร์ติชัน 38 รายการใน HDFS
ถังคืออะไร?
ที่เก็บข้อมูลในไฮฟ์ใช้ในการแยกข้อมูลตารางไฮฟ์ออกเป็นหลายไฟล์หรือไดเร็กทอรี มันถูกใช้เพื่อการสืบค้นที่มีประสิทธิภาพ
- ข้อมูลที่อยู่ในพาร์ติชั่นนั้นสามารถแบ่งออกเป็น Buckets เพิ่มเติมได้
- การแบ่งจะดำเนินการตามแฮชของคอลัมน์เฉพาะที่เราเลือกในตาราง
- ที่เก็บข้อมูลใช้อัลกอริทึม Hashing บางรูปแบบที่ส่วนหลังเพื่ออ่านแต่ละบันทึกและวางลงในที่เก็บข้อมูล
- ใน Hive เราต้องเปิดใช้งาน buckets โดยใช้ set.hive.enforce.bucketing=true;
ขั้นตอน 1) การสร้าง Bucket ดังภาพด้านล่าง
จากภาพหน้าจอด้านบน
- เรากำลังสร้าง Sample_bucket ด้วยชื่อคอลัมน์ เช่น first_name, job_id, department, เงินเดือน และประเทศ
- เรากำลังสร้างที่เก็บข้อมูล 4 อันตรงนี้
- เมื่อข้อมูลถูกโหลดโดยอัตโนมัติแล้ว ให้วางข้อมูลลงใน 4 ถัง
ขั้นตอน 2) กำลังโหลดข้อมูลลงในที่เก็บข้อมูลตัวอย่างตาราง
สมมติว่ามี "ตารางพนักงาน" ที่สร้างไว้แล้วในระบบไฮฟ์ ในขั้นตอนนี้ เราจะเห็นการโหลดข้อมูลจากตารางพนักงานลงถังตัวอย่างตาราง
ก่อนที่เราจะเริ่มย้ายข้อมูลพนักงานลงในที่เก็บข้อมูล ตรวจสอบให้แน่ใจว่าประกอบด้วยชื่อคอลัมน์ เช่น first_name, job_id, department, เงินเดือน และประเทศ
ที่นี่เรากำลังโหลดข้อมูลลงในถังตัวอย่างจากตารางพนักงาน
ขั้นตอน 3)กำลังแสดง 4 ที่เก็บข้อมูลที่สร้างขึ้นในขั้นตอนที่ 1
จากภาพหน้าจอด้านบน เราจะเห็นว่าข้อมูลจากตารางพนักงานถูกถ่ายโอนไปยัง 4 บัคเก็ตที่สร้างขึ้นในขั้นตอนที่ 1