บทที่ 8: Queries, Modeling, and Transformation
1 min readจุดประสงค์ของ Transformation
เปลี่ยน raw data → ข้อมูลที่ stakeholders ใช้ได้จริง ความแตกต่างระหว่าง query (แค่เรียกดู) กับ transformation (บันทึกผลลัพธ์ให้ downstream ใช้ต่อ)
Data Modeling Approaches
| Approach | แนวคิด | จุดเด่น | จุดอ่อน |
|---|---|---|---|
| Inmon | Top-down, normalized (3NF — Third Normal Form, ลดความซ้ำซ้อนของข้อมูล), enterprise-wide | Single source of truth ทั้งองค์กร | ช้า, ซับซ้อน |
| Kimball | Bottom-up, star schema (facts + dimensions) | Business users เข้าใจง่าย, query เร็ว | ข้อมูลซ้ำซ้อน, ไม่เหมาะกับ streaming |
| Data Vault | Hubs + Links + Satellites, insert-only | ยืดหยุ่น, audit-friendly | Business logic ต้อง interpret ตอน query |
| Wide Denormalized | ทุกอย่างใน table เดียว | ง่าย, cloud storage ถูก | สูญเสีย business logic |
Query Optimization
- Prejoin data ถ้า analytics queries join เดิมซ้ำๆ
- Pruning: ใช้ partition + cluster key เพื่อลด data scan
- Columnar databases: select เฉพาะ columns ที่ต้องการ
- Materialized views: precompute ผลลัพธ์
- Explain plan: ใช้ EXPLAIN เพื่อดู query execution plan
- CTEs (Common Table Expressions): ใช้แทน nested subqueries — อ่านง่ายกว่า, performance มักดีกว่า
Transformation Patterns
- ETL vs ELT: ปัจจุบัน ELT กลายเป็น mainstream เพราะ cloud warehouses มีพลังสูง
- SQL vs Code-based: SQL = declarative, ใช้เมื่อ transformation ง่าย; Spark/PySpark = ใช้เมื่อซับซ้อน
- Streaming Transformations: micro-batch (Spark Streaming) vs true streaming (Flink/Beam)
dbt และ Modern Transformation Tools
- dbt (Data Build Tool): revolutionize การทำ transformation — ทำให้ analysts เขียน in-database transformations ด้วย SQL
- Data engineer เปลี่ยนบทบาทจากคนสร้าง transformations มาเป็นคนตั้ง code repository + CI/CD pipeline