• 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 → ควรพิจารณาเมื่อจำเป็นต้องใช้ไฟล์ขนาดเล็ก คิวรีได้เร็ว และรองรับชนิดข้อมูลที่ซับซ้อน

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น