dbt (Data Build Tool) มีสถาปัตยกรรมแบบ ELT (Extract, Load, Transform) โดยทำหน้าที่ในส่วนของ Transform (T) เพียงอย่างเดียว สถาปัตยกรรมของ dbt ถูกออกแบบมาเพื่อเปลี่ยนนักวิเคราะห์ข้อมูล (Data Analysts) ให้ทำงานได้เหมือนวิศวกรซอฟต์แวร์ (Software Engineers) โดยอาศัยหลักการ Analytics Engineering พัฒนาโดยภาษา Rust
สถาปัตยกรรมหลักของ dbt สามารถแบ่งออกเป็นส่วนสำคัญได้ดังนี้ครับ:
1. โครงสร้างหลัก (Core Components)
- Models (SQL / Python): หัวใจหลักของ dbt คือไฟล์
.sql(หรือ.py) ซึ่งก็คือคำสั่งSELECTธรรมดา โดย dbt จะนำคำสั่งเหล่านี้ไปสร้างเป็น Table หรือ View ในคลังข้อมูลให้โดยอัตโนมัติ - Jinja Templating Engine: dbt ใช้ Jinja เพื่อทำให้ SQL มีความยืดหยุ่น (Dynamic) สามารถใช้คำสั่ง if-else, loops และการเขียนฟังก์ชันซ้ำได้ (Macros)
- Project Configuration (
dbt_project.yml): ไฟล์ศูนย์กลางที่ใช้ควบคุมการทำงานของโปรเจกต์ เช่น การตั้งค่าโฟลเดอร์ การกำหนดสิทธิ์ และการบอกว่า Model ไหนควรจะสร้างออกมาเป็น Table หรือ View
2. การบริหารจัดการความสัมพันธ์ (Dependency Management)
ref()Function: เป็นฟังก์ชันที่ dbt ใช้สร้างระบบ DAG (Directed Acyclic Graph) เพื่อหาความเชื่อมโยงระหว่างตาราง dbt จะรู้ได้ทันทีว่าตารางไหนต้องสร้างก่อนหรือหลัง ทำให้เราไม่ต้องเขียนลำดับการรันด้วยมือ- Sources: ระบบการลงทะเบียนตารางข้อมูลดิบ (Raw Data) ที่ถูกโหลดเข้ามา เพื่อให้สามารถติดตามได้ว่าข้อมูลต้นทางมาจากไหน และลดความซ้ำซ้อนในการเรียกใช้
3. ระบบความปลอดภัยภาพและการควบคุมคุณภาพ (Quality & Assurance)
- Data Testing: dbt มีระบบตรวจสอบความถูกต้องของข้อมูลในตัว (เช่น ตรวจสอบค่า Null, ค่าที่ต้องไม่ซ้ำ หรือความสัมพันธ์ของคีย์) โดยกำหนดผ่านไฟล์ YAML ง่ายๆ
- Documentation Generate: dbt สามารถสร้างเอกสาร (Documentation) และแผนผังความสัมพันธ์ของข้อมูล (Lineage Graph) ให้โดยอัตโนมัติจากโค้ดที่เราเขียน
4. การประมวลผลแบบ In-Warehouse (Push-down Architecture)
- No Storage: dbt ไม่ได้เก็บข้อมูลไว้ที่ตัวเอง และไม่ได้มีระบบ Compute Unit สำหรับประมวลผลข้อมูลขนาดใหญ่
- Adapter / Connection: dbt ทำหน้าที่ส่งโค้ด SQL ที่แปลงแล้วไปยัง Data Warehouse (เช่น BigQuery, Snowflake, Databricks, PostgreSQL) และให้คลังข้อมูลเหล่านั้นเป็นผู้ประมวลผล (Push-down) แล้วบันทึกผลลัพธ์กลับลงไปในคลังข้อมูลนั้นๆ เลย
ความคิดเห็น
แสดงความคิดเห็น