Super Sale WeekClaude Skills — 20% OFF
Glossary

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

Powerdrill Bloom·
เจาะลึกไฟล์ 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 กลุ่มแถว" โดยแต่ละคอลัมน์จะถูกจัดเก็บเป็นกลุ่มแยกต่างหากภายในแต่ละกลุ่ม โครงสร้างดังกล่าวช่วยให้โปรแกรมอ่านสามารถข้ามทั้งกลุ่มแถวและคอลัมน์ที่ไม่ต้องการได้