Flat File คืออะไร?
(evidence.dev)- Flat File เป็นรูปแบบที่พบได้บ่อยมากในการวิเคราะห์ข้อมูล
- คู่มือฉบับสมบูรณ์ นี้อธิบายว่า Flat File คืออะไร มีประเภทใดบ้าง ควรเลือกแบบไหน ไปจนถึงกรณีการใช้งาน ลักษณะของฟอร์แมต และการเปรียบเทียบกับฐานข้อมูลแบบ non-flat file และ DBMS เชิงสัมพันธ์
นิยามได้ยาก
- Flat File มักใช้เมื่อนำข้อมูลออกจากฐานข้อมูลมาเพื่อประมวลผล
- โดยทั่วไปอยู่ในรูปไฟล์ข้อความอย่างง่าย เช่น CSV ที่แต่ละแถวแทนเรคอร์ด และฟิลด์คั่นด้วยเครื่องหมายจุลภาค
- อย่างไรก็ตาม คำว่า "Flat File" ไม่มีนิยามที่ชัดเจนนัก แต่มีลักษณะร่วมกันดังนี้:
- Text-only: เก็บเฉพาะข้อความและตัวเลข ไม่ใช่ข้อมูลไบนารี (Blob)
- รูปแบบตาราง (Tabular): หนึ่งไฟล์ต่อหนึ่งตาราง ประกอบด้วยเรคอร์ดแบบอิงแถว
- พกพาง่าย: สามารถแสดงผล แก้ไข และประมวลผลได้ง่ายโดยไม่ต้องใช้ซอฟต์แวร์พิเศษ
- ไม่มีโครงสร้าง: โดยทั่วไปไม่มีลำดับชั้นหรือความสัมพันธ์ระหว่างเรคอร์ด
- ไม่มีการบีบอัด: โดยพื้นฐานไม่มี smart compression (แต่ DuckDB, Spark เป็นต้น รองรับไฟล์ zip)
- ไม่มีดัชนี: ไม่มีดัชนีในตัวสำหรับค้นหาเรคอร์ดเฉพาะ
- ไม่มีคำอธิบายกำกับ: โดยทั่วไปไม่มีเมทาดาทาหรือข้อมูลสคีมา
- JSON และ YAML อยู่นอกนิยามนี้ เพราะสามารถมีโครงสร้างแบบลำดับชั้นและสคีมาได้
- ข้อเท็จจริงที่ว่าสามารถนำไปใช้ได้ในกรณีที่หลากหลายมากก็ไม่ได้ช่วยให้จำกัดความได้ชัดขึ้น
- CSV: รูปแบบสำหรับจัดเก็บและแลกเปลี่ยนข้อมูล
- JSON: การแลกเปลี่ยนข้อมูลขนาดใหญ่ การจัดการคอนฟิก และรูปแบบผลลัพธ์จาก API
- YAML: การจัดการคอนฟิกและไฟล์นิยามไปป์ไลน์
ประเภทของ Flat File
- มีหลายประเภทตามวิธีจัดระเบียบและจัดเก็บข้อมูล
- วิธีจัดฟิลด์และเรคอร์ด
- Flat File แบบไม่มีโครงสร้าง: โครงสร้างตารางเดี่ยวแบบ CSV
- Flat File แบบมีโครงสร้าง: เช่น JSON, YAML, XML ซึ่งมีโครงสร้างแบบลำดับชั้น
- ประเภทของตัวคั่นฟิลด์
- แต่ละแถวแทนหนึ่งเรคอร์ด และใช้ตัวคั่นเพื่อแยกฟิลด์
- ใช้เครื่องหมายจุลภาค(
,), แท็บ(\t), ไปป์(|)
- ฟอร์แมตความกว้างคงที่ vs ไม่คงที่
- ฟอร์แมตความกว้างคงที่มีความยาวฟิลด์แน่นอน → ประมวลผลได้เร็ว
- ฟอร์แมตความกว้างไม่คงที่ให้ความยืดหยุ่นในการประมวลผลมากกว่า
- ตัวคั่นข้อมูล
- CSV สามารถเก็บแท็บและขึ้นบรรทัดใหม่ได้ (ผ่านการ escape)
- TSV ไม่สามารถเก็บแท็บและขึ้นบรรทัดใหม่ได้
- ความง่ายในการอ่านของมนุษย์
- Flat File มักเป็นรูปแบบที่มนุษย์อ่านได้
- บางแพลตฟอร์มยังจัดไฟล์ Excel เป็น Flat File ด้วย
- มีเมทาดาทาหรือไม่
- ไฟล์อย่าง CSV ไม่มีเมทาดาทา
- JSON สามารถมีเมทาดาทาและสคีมาของตัวเองได้
กรณีใช้งานของ Flat File
- การจัดเก็บและแลกเปลี่ยน
- การแลกเปลี่ยนข้อมูล: CSV และ JSON มีประโยชน์สำหรับการแลกเปลี่ยนข้อมูลระหว่างแพลตฟอร์มที่ต่างกัน
- การรวมข้อมูลใน ETL: Flat File มักถูกใช้เป็นทั้งข้อมูลต้นทางและปลายทางใน ETL
- การเก็บถาวรและสำรองข้อมูล: Flat File เป็นแบบข้อความ จึงเหมาะกับการเก็บระยะยาว
- การใช้งานเชิงยูทิลิตี
- การจัดการคอนฟิก: YAML, JSON, INI เป็นต้น ใช้กับตัวแปรสภาพแวดล้อม การเชื่อมต่อฐานข้อมูล ฯลฯ
- การนิยาม data pipeline: JSON, YAML เป็นต้น ใช้กำหนดโครงสร้างไปป์ไลน์
- เมทาดาทาของชุดข้อมูล: JSON สามารถนิยามการแปลงและการตรวจสอบความถูกต้องของ CSV ได้
ตัวอย่างของ Flat File
CSV (Comma-Separated Values)
- นามสกุลไฟล์:
.csv - ตัวคั่น: เครื่องหมายจุลภาค
, - โครงสร้าง: แบบแบน (Flat)
- มนุษย์อ่านได้ง่าย
- ตัวอย่าง:
name, country, age Alice, USA, 22 Bob, Canada, 34 Charlie, UK, 28 - เกณฑ์ในการเลือกใช้:
- เหมาะกับข้อมูลแบบตารางที่มีโครงสร้าง
- มีประโยชน์เมื่อต้องส่งออกไปยังระบบ BI, Excel/Google Sheets
- เกณฑ์ในการหลีกเลี่ยง:
- ไม่เหมาะเมื่อจำเป็นต้องมีโครงสร้างแบบลำดับชั้นที่ซับซ้อน
- อาจเกิดปัญหาเมื่อต้องจัดการข้อมูลที่มีเครื่องหมายจุลภาคอยู่ภายใน
TSV (Tab-Separated Values)
- นามสกุลไฟล์:
.tsv - ตัวคั่น: แท็บ
\t - โครงสร้าง: แบบแบน (Flat)
- มนุษย์อ่านได้ง่าย
- ตัวอย่าง:
name country age Alice USA 22 Bob Canada 34 Charlie UK 28 - เกณฑ์ในการเลือกใช้:
- มีประโยชน์เมื่อต้องจัดการข้อมูลที่มีเครื่องหมายจุลภาคอยู่ภายใน
- ประมวลผลง่ายด้วยเครื่องมือ Unix CLI
- เกณฑ์ในการหลีกเลี่ยง:
- อาจเกิดปัญหาเมื่อต้องจัดการข้อมูลที่มีแท็บอยู่ภายใน
JSON (JavaScript Object Notation)
- นามสกุลไฟล์:
.json - โครงสร้าง: แบบลำดับชั้น
- มนุษย์อ่านได้ง่าย
- ตัวอย่าง:
[ {"name": "Alice", "country": "USA", "age": 22}, {"name": "Bob", "country": "Canada", "age": 34}, {"name": "Charlie", "country": "UK", "age": 28} ] - เกณฑ์ในการเลือกใช้:
- เหมาะเมื่อจำเป็นต้องใช้โครงสร้างข้อมูลแบบลำดับชั้น
- เกณฑ์ในการหลีกเลี่ยง:
- ไม่เหมาะเมื่อให้ความสำคัญกับความเร็วในการประมวลผล
YAML (YAML Ain’t Markup Language)
- นามสกุลไฟล์: .yaml
- โครงสร้าง: แบบลำดับชั้น
- มนุษย์อ่านได้ง่าย
- ตัวอย่าง:
name: Alice country: USA age: 22 - เกณฑ์ในการเลือกใช้:
- เหมาะเมื่อจำเป็นต้องใช้ไฟล์คอนฟิกที่มนุษย์อ่านได้ง่าย
- เกณฑ์ในการหลีกเลี่ยง:
- ไม่เหมาะกับการจัดเก็บข้อมูลขนาดใหญ่
ENV Files
- นามสกุลไฟล์: .env
- โครงสร้าง: แบบแบน (Flat)
- มนุษย์อ่านได้ง่าย
- ตัวอย่าง:
APP_NAME=MyApp ENVIRONMENT=production - เกณฑ์ในการเลือกใช้:
- เหมาะเมื่อจำเป็นต้องมีไฟล์ตั้งค่าสำหรับการดีพลอยและสภาพแวดล้อมภายในเครื่อง
- เกณฑ์ในการหลีกเลี่ยง:
- ไม่เหมาะกับการจัดเก็บโครงสร้างข้อมูลที่ซับซ้อน
เปรียบเทียบ Flat File vs Non-Flat File vs DBMS
Flat File มักถูกนำไปเปรียบเทียบกับฐานข้อมูลเชิงสัมพันธ์ (RDBMS) และยังมีฟอร์แมตคั่นกลางอย่าง Avro, Parquet, ORC อยู่ด้วย ต่อไปนี้คือการเปรียบเทียบคุณลักษณะของฟอร์แมตหลัก ๆ:
-
วิธีจัดเรคอร์ด
- CSV: จัดเก็บข้อมูลแบบอิงแถว (Row)
- JSON: จัดเก็บแบบคู่คีย์-ค่า
- Parquet: จัดเก็บแบบอิงคอลัมน์ (Column)
- DBMS เชิงสัมพันธ์: จัดเก็บข้อมูลแบบอิงแถว (Row)
-
เป็นรูปแบบที่มนุษย์อ่านได้หรือไม่
- CSV และ JSON: อยู่บนข้อความ → มนุษย์อ่านได้ง่าย
- Parquet และ DBMS: อยู่บนไบนารี → มนุษย์อ่านได้ยาก
-
ความสามารถในการพกพา (Portability)
- CSV, JSON, Parquet: เข้ากันได้ดีระหว่างแพลตฟอร์ม
- DBMS: ใช้งานได้เฉพาะในซอฟต์แวร์บางตัว
-
การรองรับโครงสร้างแบบลำดับชั้น
- CSV: ไม่มีโครงสร้างแบบลำดับชั้น
- JSON: รองรับโครงสร้างแบบลำดับชั้น
- Parquet: รองรับโครงสร้างซ้อนกัน
- DBMS: รองรับหลายตารางและโครงสร้างเชิงสัมพันธ์
-
การขยายขนาด (Scalability)
- CSV, JSON: ขยายขนาดได้จำกัด
- Parquet, DBMS: ขยายขนาดได้ดี
-
รองรับดัชนีหรือไม่
- CSV, JSON: ไม่มีดัชนี
- Parquet: ค้นหาได้เร็วผ่านเมทาดาทาระดับไฟล์และระดับคอลัมน์
- DBMS: รองรับดัชนี
-
รองรับสคีมาหรือไม่
- CSV: ไม่มีสคีมา
- JSON: สามารถมีสคีมาได้
- Parquet, DBMS: บังคับใช้สคีมา
- Parquet ไม่ได้ใช้ดัชนีแบบ B-Tree หรือแฮช แต่เพิ่มความเร็วในการค้นหาข้อมูลผ่านเมทาดาทาระดับไฟล์ ระดับ row group และระดับคอลัมน์
การเลือกฟอร์แมต Flat File ที่เหมาะสม
- CSV, TSV → สำหรับการแลกเปลี่ยนและจัดเก็บข้อมูลแบบง่าย เช่น การเก็บถาวรข้อมูลหรือย้ายข้อมูลข้ามแพลตฟอร์ม
- JSON → ใช้เมื่อจำเป็นต้องมีฟอร์แมตไฟล์แบบ self-describing ที่มีโครงสร้างแบบลำดับชั้น
- YAML → เหมาะกับการตั้งค่าคอนฟิกและไปป์ไลน์
- Parquet → ควรพิจารณาเมื่อจำเป็นต้องใช้ไฟล์ขนาดเล็ก คิวรีได้เร็ว และรองรับชนิดข้อมูลที่ซับซ้อน
ยังไม่มีความคิดเห็น