Parquet Format กับ Cost Optimization — ลดค่าใช้จ่าย Cloud Storage และ Query ด้วย Columnar Format

Parquet Format คืออะไร

Apache Parquet เป็น Open-source Columnar Storage Format ที่ออกแบบมาสำหรับ Big Data Analytics จุดเด่นคือเก็บข้อมูลเป็นคอลัมน์ (Column-oriented) แทนที่จะเก็บเป็นแถว (Row-oriented) แบบ CSV ทำให้ Query ที่อ่านเฉพาะบางคอลัมน์ทำงานเร็วขึ้นหลายเท่า และบีบอัดข้อมูลได้ดีกว่ามากเพราะข้อมูลในคอลัมน์เดียวกันมักมีลักษณะคล้ายกัน
Parquet ถูกใช้อย่างแพร่หลายใน Data Lake, Data Warehouse และ Big Data Pipeline ทั้งบน Cloud (AWS S3 + Athena, GCS + BigQuery, Azure + Synapse) และ On-premise (Hadoop, Spark) เป็น Format มาตรฐานที่ทุก Data Tool รองรับ
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: CrewAI Multi-Agent DevOps Culture
เปรียบเทียบ Parquet กับ CSV และ JSON
| คุณสมบัติ | CSV | JSON | Parquet |
|---|---|---|---|
| Storage Format | Row-based, Text | Row-based, Text | Columnar, Binary |
| Compression Ratio | ต่ำ (gzip ~60%) | ต่ำ (gzip ~65%) | สูงมาก (snappy ~80-90%) |
| Schema | ไม่มี | ไม่มี (Semi-structured) | มี Schema ในตัว |
| Column Pruning | ไม่ได้ | ไม่ได้ | ได้ — อ่านเฉพาะคอลัมน์ที่ต้องการ |
| Predicate Pushdown | ไม่ได้ | ไม่ได้ | ได้ — Filter ก่อนอ่านข้อมูล |
| Human Readable | ได้ | ได้ | ไม่ได้ (Binary) |
| Append | ง่ายมาก | ง่าย | ต้องเขียนไฟล์ใหม่ |
| เหมาะกับ | ข้อมูลเล็ก แชร์ง่าย | API, Semi-structured | Big Data Analytics |
Partitioning Strategy

- Partition by Date: เหมาะกับ Time-series Data เช่น Logs, Events, Transactions ใช้ year/month/day เป็น Partition Key
- Partition by Category: เหมาะเมื่อ Query Filter ด้วย Category เสมอ เช่น region, country, product_type
- ระวัง Over-partitioning: ถ้า Partition มีไฟล์เล็กมากๆ (Small Files Problem) จะช้ากว่าเพราะต้อง Open ไฟล์เยอะ แต่ละ Partition ควรมีข้อมูลอย่างน้อย 128 MB
- ใช้ Hive-style Partitioning: เก็บเป็น path/year=2026/month=03/data.parquet เพื่อให้ Query Engine ทำ Partition Pruning ได้
Best Practices สำหรับ Parquet
- เลือก Compression ที่เหมาะสม: snappy สำหรับความเร็ว, zstd สำหรับสมดุลระหว่างขนาดและความเร็ว, gzip สำหรับขนาดเล็กที่สุด
- ตั้ง Row Group Size ให้เหมาะสม: 128 MB - 1 GB ต่อ Row Group ใหญ่เกินไปจะใช้ Memory เยอะ เล็กเกินไปจะ Compress ไม่ดี
- Optimize Data Types: ใช้ int32 แทน int64 เมื่อเป็นไปได้ ใช้ Dictionary Encoding สำหรับ Low-cardinality Columns
- Sort Data ก่อนเขียน: Sort ตามคอลัมน์ที่ใช้ Filter บ่อยจะช่วยให้ Min/Max Statistics ทำงานดีขึ้น
- ใช้ Predicate Pushdown: เขียน WHERE clause ให้ตรงกับ Partition Key และ Sort Column เพื่อข้าม Row Groups ที่ไม่เกี่ยวข้อง
Parquet Format คืออะไรและต่างจาก CSV อย่างไร
Parquet เป็น Columnar Storage Format เก็บข้อมูลเป็นคอลัมน์แทนแถว ต่างจาก CSV ที่เก็บเป็นแถว ข้อดีคือบีบอัดได้ดีกว่า 60-90% อ่านเฉพาะคอลัมน์ที่ต้องการได้ มี Schema ในตัว และ Query เร็วกว่ามากสำหรับ Analytical Workload
Parquet ช่วยลดค่าใช้จ่าย Cloud ได้อย่างไร
ลด Storage Cost 60-90% เพราะไฟล์เล็กกว่า CSV ลด Query Cost บน BigQuery/Athena เพราะอ่านเฉพาะคอลัมน์ที่ต้องการ (Column Pruning) ลด Data Transfer Cost และลด Compute Cost เพราะ Query เร็วขึ้น ข้อมูล 500 GB อาจประหยัดได้หลายร้อยดอลลาร์ต่อเดือน
แนะนำเพิ่มเติม — แหล่งความรู้ Forex iCafeForex
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน ModSecurity WAF Distributed System
ควรใช้ Parquet เมื่อไรและไม่ควรใช้เมื่อไร
ควรใช้เมื่อมีข้อมูลขนาดใหญ่ (100+ MB) ต้อง Query แบบ Analytical อ่านบางคอลัมน์ และต้องการประหยัด Storage ไม่ควรใช้เมื่อต้อง Append ทีละแถวบ่อยๆ ต้องอ่านด้วย Text Editor หรือข้อมูลเล็กไม่กี่ MB ที่ CSV ก็เพียงพอ
เนื้อหาเกี่ยวข้อง — Rust Axum Freelance IT Career
วิธีแปลง CSV เป็น Parquet ทำอย่างไร
ใช้ Python: pd.read_csv().to_parquet() หรือ DuckDB: COPY FROM 'file.csv' TO 'file.parquet' สำหรับไฟล์ใหญ่ใช้ Apache Spark หรือ AWS Glue กำหนด compression เป็น snappy หรือ zstd และ Partition ตามคอลัมน์ที่ Filter บ่อยเพื่อประสิทธิภาพสูงสุด
แนะนำเพิ่มเติม — ติดตาม XM Signal
สรุปและแนวทางปฏิบัติ
Parquet เป็น Format มาตรฐานสำหรับ Big Data Analytics ที่ช่วยลดค่าใช้จ่ายทั้ง Storage และ Query Cost บน Cloud ได้อย่างมีนัยสำคัญ การเปลี่ยนจาก CSV เป็น Parquet เป็นหนึ่งใน Quick Win ที่ง่ายที่สุดสำหรับ Cost Optimization สิ่งสำคัญคือเลือก Compression ที่เหมาะสม ตั้ง Partition Strategy ตาม Query Pattern ใช้ Data Type ที่เล็กที่สุดเท่าที่เป็นไปได้ และ Sort Data ก่อนเขียนเพื่อให้ Predicate Pushdown ทำงานดี
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: เขียนโปรแกรมเริ่มจาก 0 —





