เจาะลึกไฟล์ Parquet: โครงสร้าง, กรณีการใช้งาน, และข้อดีหลัก

ไฟล์ Parquet จัดเก็บข้อมูลตามคอลัมน์แทนที่จะเป็นตามแถว โครงการ Apache Parquet อธิบายไว้ว่าเป็น "รูปแบบไฟล์ข้อมูลแบบเน้นคอลัมน์ที่เป็นโอเพนซอร์ส ซึ่งได้รับการออกแบบมาเพื่อการจัดเก็บและการดึงข้อมูลที่มีประสิทธิภาพ" การตัดสินใจในการออกแบบเพียงข้อเดียวนั้นอธิบายได้ว่าทำไมมันถึงมีขนาดเล็กกว่า ค้นหาข้อมูลได้เร็วกว่า และเปิดด้วยการดับเบิลคลิกได้ยากกว่า
ไฟล์ Parquet คืออะไร?
Parquet คือรูปแบบไฟล์สำหรับข้อมูลในรูปแบบตาราง ซึ่งดูแลโดยโครงการ Apache เอกสารอย่างเป็นทางการระบุว่า "มีรูปแบบการบีบอัดและการเข้ารหัสที่มีประสิทธิภาพสูงเพื่อจัดการกับข้อมูลที่ซับซ้อนในปริมาณมาก" และยังเสริมอีกว่ารูปแบบนี้ "ได้รับการรองรับในภาษาโปรแกรมและเครื่องมือวิเคราะห์ข้อมูลมากมาย"
คุณสมบัติที่เป็นตัวกำหนดคือทิศทางการจัดเรียงข้อมูล CSV จะเขียนทีละแถว: ทุกฟิลด์ของระเบียนแรก จากนั้นจึงเป็นทุกฟิลด์ของระเบียนที่สอง ส่วน Parquet จะเขียนทีละคอลัมน์: ทุกค่าของคอลัมน์แรก จากนั้นจึงเป็นทุกค่าของคอลัมน์ที่สอง
นั่นอาจฟังดูเหมือนเป็นเรื่องทางเทคนิค แต่มันส่งผลลัพธ์ที่ยิ่งใหญ่สองประการ ค่าในคอลัมน์เดียวกันมักจะมีความคล้ายคลึงกัน ซึ่งทำให้บีบอัดข้อมูลได้ดีกว่าแถวที่มีข้อมูลผสมกันอย่างมาก และการสืบค้นข้อมูลที่ต้องการเพียงสามคอลัมน์จากทั้งหมดเก้าสิบคอลัมน์ ก็สามารถอ่านเฉพาะสามคอลัมน์นั้นได้ แทนที่จะต้องสแกนทุกแถวเพื่อทิ้งข้อมูลส่วนใหญ่ไป
รูปแบบนี้ได้รับการกำหนดข้อกำหนดไว้อย่างเป็นทางการ เอกสารของ Apache ระบุว่า "พื้นที่เก็บข้อมูล parquet-format เป็นที่เก็บข้อกำหนดอย่างเป็นทางการของรูปแบบไฟล์ Parquet ซึ่งกำหนดวิธีการจัดโครงสร้างและการจัดเก็บข้อมูล"
โครงสร้างของไฟล์ Parquet เป็นอย่างไร
ส่วนห่อหุ้ม (The envelope)
ไฟล์ Parquet ทุกไฟล์จะเปิดและปิดด้วยข้อมูลขนาดสี่ไบต์เดียวกัน ข้อกำหนดแสดงให้เห็น "เลขวิเศษขนาด 4 ไบต์ 'PAR1'" ที่จุดเริ่มต้น และเลขวิเศษเดียวกันนั้นที่จุดสิ้นสุด
ระหว่างนั้นจะเป็นข้อมูล และเมทาดาตาจะอยู่ใกล้กับส่วนท้าย ก่อนหน้าเลขวิเศษปิดท้าย จะมี "ความยาวขนาด 4 ไบต์ในหน่วยไบต์ของเมทาดาตาไฟล์ (little endian)" ค่าดังกล่าวจะบอกให้โปรแกรมอ่านทราบว่าต้องย้อนกลับไปไกลแค่ไหนเพื่อค้นหาบล็อกเมทาดาตา
กลุ่มแถวและกลุ่มคอลัมน์
ภายในส่วนห่อหุ้ม ข้อมูลจะถูกแบ่งออกเป็นสองส่วน ข้อกำหนดอธิบายถึงไฟล์ที่มี "N คอลัมน์ในตารางนี้ ซึ่งแบ่งออกเป็น M กลุ่มแถว"
กลุ่มแถวคือส่วนตัดขวางในแนวนอน หรือก็คือกลุ่มของแถว ภายในแต่ละกลุ่มแถว ค่าของแต่ละคอลัมน์จะถูกจัดเก็บไว้ด้วยกันเป็นกลุ่มคอลัมน์ ดังนั้น ไฟล์ที่มี 90 คอลัมน์และ 10 กลุ่มแถว จะมีกลุ่มคอลัมน์ 900 กลุ่ม ซึ่งแต่ละกลุ่มจะเป็นชุดค่าที่ต่อเนื่องกันจากคอลัมน์เดียว
การแบ่งสองชั้นนี้คือสิ่งที่ทำให้สามารถเลือกอ่านข้อมูลได้ การสืบค้นสามารถข้ามกลุ่มแถวทั้งหมดที่ไม่มีข้อมูลที่ตรงกัน จากนั้นจึงอ่านเฉพาะกลุ่มคอลัมน์ที่ต้องการจากกลุ่มแถวที่เหลืออยู่
ทำไมเมทาดาตาถึงอยู่ตอนท้าย
เรื่องนี้สร้างความประหลาดใจให้กับผู้ที่คาดหวังว่าจะเห็นส่วนหัว เอกสารของ Apache อธิบายเหตุผลโดยตรงว่า "เมทาดาตาของไฟล์จะถูกเขียนหลังจากข้อมูล เพื่อให้สามารถเขียนไฟล์ได้ในรอบเดียว"
โปรแกรมเขียนข้อมูลที่กำลังสตรีมชุดข้อมูลขนาดใหญ่จะไม่ทราบตำแหน่งไบต์สุดท้ายของแต่ละกลุ่มจนกว่าจะเขียนเสร็จ การใส่เมทาดาตาไว้ท้ายสุดหมายความว่าไม่จำเป็นต้องย้อนกลับไปแก้ไขส่วนหัวอีกเลย
รูปแบบการอ่านก็เป็นไปตามหลักการนี้ ตามเอกสารระบุว่า เมทาดาตาของไฟล์ "ประกอบด้วยตำแหน่งเริ่มต้นทั้งหมดของกลุ่มคอลัมน์" และเสริมว่า "ผู้ใช้บริการอ่านข้อมูลควรจะอ่านเมทาดาตาของไฟล์ก่อนเพื่อค้นหากลุ่มคอลัมน์ทั้งหมดที่พวกเขาสนใจ"
Parquet ใช้ทำอะไร
โดยทั่วไปคุณจะพบไฟล์ .parquet ในหนึ่งในสี่สถานการณ์นี้
การส่งออกข้อมูลจากคลังข้อมูล เมื่อมีคนส่งออกตารางขนาดใหญ่จากคลังข้อมูลสมัยใหม่ รูปแบบนี้มักจะเป็นค่าเริ่มต้น เนื่องจากไฟล์ยังมีขนาดที่จัดการได้ง่าย
การจัดเก็บข้อมูลในทะเลข้อมูล ไฟล์ที่อยู่ในพื้นที่จัดเก็บข้อมูลแบบออบเจกต์บนคลาวด์มักจะใช้รูปแบบนี้ เนื่องจากเครื่องมือประมวลผลสามารถอ่านคอลัมน์บางส่วนได้โดยไม่ต้องดาวน์โหลดข้อมูลทั้งหมด
การส่งมอบงานระหว่างทีม วิศวกรข้อมูลที่ส่งข้อมูลธุรกรรมย้อนหลังหนึ่งปีให้คุณ มักจะเลือกใช้รูปแบบนี้แทนที่จะเป็น CSV ซึ่งจะมีขนาดใหญ่กว่าหลายเท่า
การแลกเปลี่ยนข้อมูลระหว่างเครื่องมือวิเคราะห์ เนื่องจากรูปแบบนี้ได้รับการรองรับในหลายภาษาและเครื่องมือ จึงสามารถส่งผ่านระหว่างระบบต่างๆ ได้โดยไม่ต้องมีขั้นตอนการแปลงข้อมูลในระหว่างทาง
จุดร่วมที่สำคัญคือเรื่องของขนาด มันจะกลายเป็นตัวเลือกที่ชัดเจนเมื่อไฟล์ CSV เริ่มมีขนาดใหญ่เกินกว่าจะเคลื่อนย้ายได้อย่างสะดวก
Parquet ปะทะ CSV
| Parquet | CSV | |
|---|---|---|
| ทิศทางการจัดเรียงข้อมูล | เน้นคอลัมน์ (Column-oriented) | เน้นแถว (Row-oriented) |
| อ่านได้ในโปรแกรมแก้ไขข้อความ | ไม่ เนื่องจากเป็นไฟล์ไบนารี | ใช่ |
| ขนาดไฟล์ทั่วไป | เล็กกว่า ด้วยการบีบอัดข้อมูลตามคอลัมน์ | ใหญ่กว่าสำหรับข้อมูลชุดเดียวกัน |
| การอ่านข้อมูลเพียงไม่กี่คอลัมน์ | อ่านเฉพาะกลุ่มคอลัมน์เหล่านั้น | อ่านทั้งไฟล์ |
| ประเภทข้อมูล | ระบุไว้ในเมทาดาตาของไฟล์ | คาดเดาโดยโปรแกรมใดก็ตามที่เปิดไฟล์ |
| เปิดด้วยการดับเบิลคลิก | โดยทั่วไปไม่ได้ | มักจะเปิดในโปรแกรมสเปรดชีต |
| เหมาะที่สุดสำหรับ | ตารางขนาดใหญ่, การสืบค้นข้อมูลซ้ำๆ | ตารางขนาดเล็ก, การตรวจสอบอย่างรวดเร็ว, การแชร์ทั่วไป |
พฤติกรรมของประเภทข้อมูลเป็นเรื่องที่ควรบันทึกไว้ CSV จะไม่ทราบว่า 00123 เป็นตัวเลขหรือสตริง ซึ่งเป็นสาเหตุที่ทำให้เลขศูนย์นำหน้าและวันที่เกิดความเสียหายเมื่อนำเข้าข้อมูล ส่วน Parquet จะบันทึกประเภทข้อมูลไว้ในเมทาดาตา ดังนั้นค่าที่คุณเขียนลงไปจึงเป็นค่าเดียวกับที่คุณอ่านกลับมา
สำหรับการเปรียบเทียบในด้านที่เน้นแถว คำอธิบายเกี่ยวกับ CSV จะครอบคลุมเนื้อหาเดียวกันจากอีกมุมหนึ่ง ส่วน การวิเคราะห์ TSV จะครอบคลุมรูปแบบที่คั่นด้วยแท็บ
ข้อดีที่สำคัญ
การบีบอัดที่มีประสิทธิภาพทวีคูณ การจัดเก็บค่าที่คล้ายกันไว้ข้างๆ กันช่วยให้ตัวเข้ารหัสทำงานได้มีประสิทธิภาพมากขึ้น เอกสารของ Apache ยกความดีความชอบให้กับ "รูปแบบการบีบอัดและการเข้ารหัสที่มีประสิทธิภาพสูง"
การตัดคอลัมน์ที่ไม่จำเป็น การอ่านข้อมูลเพียงสามคอลัมน์จากเก้าสิบคอลัมน์จะใช้ทรัพยากร I/O เท่ากับสามคอลัมน์ แทนที่จะเป็นเก้าสิบคอลัมน์
การข้ามกลุ่มแถว เนื่องจากเมทาดาตาจะบันทึกข้อมูลที่อยู่ในแต่ละกลุ่มแถว โปรแกรมอ่านจึงสามารถข้ามข้อมูลทั้งส่วนได้ก่อนที่จะเข้าไปเข้าถึงข้อมูลเหล่านั้นด้วยซ้ำ
ประเภทข้อมูลไม่สูญหายระหว่างทาง วันที่ยังคงเป็นวันที่ และตัวระบุยังคงรักษาเลขศูนย์นำหน้าไว้ได้ เนื่องจากโครงสร้างข้อมูลจะเดินทางไปพร้อมกับไฟล์
การเขียนไฟล์ในรอบเดียว เมทาดาตาที่อยู่ตอนท้ายหมายความว่าไฟล์ที่มีขนาดใหญ่มากสามารถเขียนในรูปแบบสตรีมได้
การรองรับที่กว้างขวาง เอกสารระบุว่ามีการรองรับใน "ภาษาโปรแกรมและเครื่องมือวิเคราะห์ข้อมูลมากมาย" ดังนั้นจึงแทบจะไม่มีปัญหาเรื่องการใช้งานไม่ได้
จุดที่ Parquet เริ่มไม่ตอบโจทย์
Parquet ช่วยแก้ปัญหาเรื่องการจัดเก็บและการดึงข้อมูล แต่มันไม่ได้ช่วยตอบคำถามใดๆ ที่คุณมีเกี่ยวกับสิ่งที่อยู่ในไฟล์จริงๆ
มันเป็นไฟล์ไบนารี ดังนั้นคุณจึงไม่สามารถเหลือบมองดูข้อมูลได้ทันที การเปิด CSV เพื่อตรวจสอบว่าคอลัมน์รายได้เป็นยอดรวมหรือยอดสุทธิใช้เวลาเพียงห้าวินาที แต่ไฟล์ไบนารีจำเป็นต้องใช้เครื่องมือเฉพาะก่อนที่คุณจะสามารถมองเห็นอะไรได้เลย
นอกจากนี้ยังไม่เหมาะกับข้อมูลขนาดเล็ก สำหรับตารางค้นหาข้อมูลขนาด 200 แถว ภาระของเมทาดาตาและความต้องการเครื่องมือเฉพาะจะมีน้ำหนักมากกว่าประโยชน์จากการบีบอัดข้อมูล ในกรณีนี้ CSV เป็นรูปแบบไฟล์ที่ดีกว่า และการยอมรับความจริงในเรื่องนี้ก็เป็นส่วนหนึ่งของการใช้งาน Parquet ได้อย่างมีประสิทธิภาพ
และมันไม่ได้บอกอะไรเกี่ยวกับคุณภาพของข้อมูลเลย ไฟล์นี้สามารถบรรจุข้อมูลที่ไร้สาระซึ่งมีการระบุประเภทข้อมูลอย่างสมบูรณ์แบบและบีบอัดอย่างมีประสิทธิภาพ เช่น ระเบียนข้อมูลที่ซ้ำกัน, คอลัมน์สกุลเงินที่มีสองสกุลเงินปะปนกัน, หรือรหัสลูกค้าที่เปลี่ยนโครงสร้างข้อมูลในเดือนมีนาคม รูปแบบไฟล์นี้รับประกันความถูกต้องในการจัดเก็บข้อมูล ไม่ใช่ความถูกต้องของเนื้อหาข้อมูล
วิธีทำงานกับไฟล์ Parquet หากคุณไม่ใช่วิศวกร
นี่คือช่องว่างในทางปฏิบัติ เครื่องมือทางธุรกิจส่วนใหญ่จะถือว่าข้อมูลอยู่ในรูปแบบสเปรดชีต และไฟล์ .parquet จะไม่สามารถเปิดได้เหมือนกับไฟล์ CSV
วิธีการที่ใช้งานได้จริงคือขั้นตอนการแปลงไฟล์ ขอให้ผู้ที่สร้างไฟล์ส่งข้อมูลที่ดึงออกมาเป็น CSV หรือ Excel เฉพาะคอลัมน์ที่คุณต้องการจริงๆ หรือแปลงไฟล์ด้วยตัวเองโดยใช้เครื่องมือใดก็ได้ที่รองรับ Parquet คุณจะสูญเสียประโยชน์จากการบีบอัดข้อมูลไป แต่นั่นก็ไม่ใช่เรื่องสำคัญเมื่อข้อมูลมาอยู่บนเครื่องของคุณและถูกจำกัดขอบเขตให้เล็กลงแล้ว
จากจุดนั้น การทำงานก็จะเป็นการวิเคราะห์ทั่วไป หน้าข้อมูลราคาของ Powerdrill Bloom มีรายการอัปโหลดสำหรับ Excel, CSV, PDF และเอกสารต่างๆ ดังนั้นข้อมูลที่แปลงแล้วจึงสามารถนำเข้าได้ทันที คุณสามารถถามคำถามด้วยภาษาธรรมชาติแทนที่จะต้องเขียนเป็นคำสั่งสืบค้น ผู้ช่วย AI สำหรับ CSV จะครอบคลุมแนวทางนั้น และ ตัวเชื่อมต่อข้อมูล จะครอบคลุมกรณีที่การดึงข้อมูลโดยตรงดีกว่าการส่งออกไฟล์
ข้อแตกต่างที่ควรจดจำคือ Parquet เป็นการตัดสินใจในการจัดเก็บข้อมูลที่เกิดขึ้นก่อนจะถึงมือคุณ มันไม่ใช่เครื่องมือวิเคราะห์ และการแปลงไฟล์ไปเป็นรูปแบบอื่นเมื่อไฟล์มาถึงโต๊ะทำงานของคุณแล้วถือเป็นเรื่องปกติ ไม่ใช่แค่การแก้ปัญหาเฉพาะหน้า
บทสรุป
Parquet คือการจัดเก็บข้อมูลแบบเน้นคอลัมน์ โดยมีโครงสร้างข้อมูลและดัชนีอยู่ที่ส่วนท้ายของไฟล์ การออกแบบดังกล่าวช่วยให้บีบอัดข้อมูลได้ดี เลือกอ่านข้อมูลได้ และมีประเภทข้อมูลที่เชื่อถือได้ ซึ่งเป็นเหตุผลว่าทำไมมันจึงกลายเป็นค่าเริ่มต้นสำหรับข้อมูลขนาดใหญ่
สิ่งที่มันไม่ได้ให้มาด้วยคือความสามารถในการมองเห็นข้อมูลได้ทันที เมื่อไฟล์ไปถึงมือของคนที่ต้องการคำตอบมากกว่าการจัดเก็บข้อมูล ขั้นตอนต่อไปที่มีประโยชน์มักจะเป็นการดึงข้อมูลเฉพาะส่วนที่ต้องการและการตั้งคำถาม
หากคุณกำลังอยู่ในจุดนั้น ลองใช้ Powerdrill Bloom กับไฟล์ที่แปลงแล้ว และเริ่มต้นด้วย การเปลี่ยนข้อมูลให้เป็นแผนภูมิ
คำถามที่พบบ่อย
ไฟล์ Parquet ใช้ทำอะไร?
Parquet ใช้สำหรับจัดเก็บชุดข้อมูลในรูปแบบตารางขนาดใหญ่อย่างมีประสิทธิภาพ มักใช้สำหรับการส่งออกข้อมูลจากคลังข้อมูล, การจัดเก็บข้อมูลในทะเลข้อมูล, การส่งมอบงานระหว่างทีม และการแลกเปลี่ยนข้อมูลระหว่างเครื่องมือวิเคราะห์ เหตุผลก็คือมันบีบอัดข้อมูลได้ดีและรองรับการอ่านเฉพาะคอลัมน์ที่เลือกเท่านั้น
Parquet ดีกว่า CSV หรือไม่?
สำหรับตารางขนาดใหญ่ที่มีการสืบค้นข้อมูลซ้ำๆ คำตอบคือใช่: มันมีขนาดเล็กกว่า มีการระบุประเภทข้อมูล และรองรับการตัดคอลัมน์ที่ไม่จำเป็น สำหรับตารางขนาดเล็กที่คุณต้องการตรวจสอบหรือแชร์ในวงกว้าง CSV จะใช้งานง่ายกว่าเนื่องจากเป็นข้อความและเปิดได้ทุกที่
ฉันสามารถเปิดไฟล์ Parquet ใน Excel ได้หรือไม่?
ไม่สามารถเปิดได้ด้วยการดับเบิลคลิก เนื่องจาก Parquet เป็นรูปแบบไฟล์ไบนารีไม่ใช่ข้อความ วิธีการทั่วไปคือการแปลงเป็น CSV หรือ Excel ก่อน หรือใช้เครื่องมือที่สามารถอ่าน Parquet ได้โดยตรง
ทำไมเมทาดาตาของ Parquet ถึงถูกจัดเก็บไว้ที่ส่วนท้ายของไฟล์?
เอกสารของ Apache อธิบายว่าเมทาดาตาจะถูกเขียนหลังจากข้อมูล "เพื่อให้สามารถเขียนไฟล์ได้ในรอบเดียว" โปรแกรมเขียนข้อมูลที่กำลังสตรีมชุดข้อมูลขนาดใหญ่จะไม่ทราบตำแหน่งสุดท้ายของกลุ่มข้อมูลล่วงหน้า ดังนั้นการเขียนเมทาดาตาไว้ท้ายสุดจึงช่วยหลีกเลี่ยงการย้อนกลับไปแก้ไขส่วนหัว
กลุ่มแถวใน Parquet คืออะไร?
กลุ่มแถวคือส่วนตัดขวางในแนวนอนของตาราง ข้อกำหนดอธิบายคอลัมน์ของไฟล์ว่า "แบ่งออกเป็น M กลุ่มแถว" โดยแต่ละคอลัมน์จะถูกจัดเก็บเป็นกลุ่มแยกต่างหากภายในแต่ละกลุ่ม โครงสร้างดังกล่าวช่วยให้โปรแกรมอ่านสามารถข้ามทั้งกลุ่มแถวและคอลัมน์ที่ไม่ต้องการได้