dbt คือเครื่องมือตัวใหม่ในงาน data analytics ที่กำลังมาแรงในต่างประเทศ กับสโลแกน “The New Standard of Data Transformation”

ด้วยเนื้องานทีม data ที่เปลี่ยนไป เลยมีตำแหน่งใหม่ชื่อว่า Analytics Engineers (AE) เป็น Role ที่ใช้ dbt เป็นหลัก

เกิดมาเพื่อปิดช่องว่างระหว่าง business users กับทีม data engineers

แต่ไม่ใช่แค่ AE เท่านั้นที่ใช้ dbt ตอนนี้ทั้ง analysts และ engineers ก็เริ่มใช้ dbt ใน data stack ของบริษัทมากขึ้นเรื่อยๆ อีกไม่กี่ปีน่าจะกลายเป็น common tool แล้ว

บทความนี้แอดเขียนแนะนำ dbt ให้อ่านแบบละเอียด พร้อมสรุปเนื้อหาบางส่วนจากคอร์ส Introduction to dbt ของ datacamp รู้ไว้ ไม่ตกเทรนด์ ✌️

What is dbt

Source: what is dbt – dbt labs

dbt หรือ Data Build Tool เป็นเครื่องมือสำหรับทำ Transformation ใน ELT pipeline (Extract > Load > Transform) สำหรับ data warehouse โดยเฉพาะ

ทำไมต้องใช้ dbt?

  • ใช้แค่ SQL ก็ปั้น data models และ business logics ได้ง่ายๆ
  • มีสองเวอร์ชันทั้งแบบ open-soure ใช้งานฟรี และ cloud-based
  • งานเสร็จไวขึ้น มิติใหม่ของ data transformation workflow
  • ใช้งานร่วมกับ data platforms ได้ทุกที่ตั้งแต่ BigQuery, Snowflake, Redshift, Databricks, PostgreSQL ไปจนถึง DuckDB
  • เข้าใจ dbt ก็เข้าใจศาสตร์ Analytics Engineering

ถ้าเราดู search volume ของ “dbt + data build tool” ใน Google Trends ทั่วโลกตั้งแต่ปี 2019-2024 จะเห็นว่าเทรนด์กำลังมาแรง แซงทุก stack 555+

การค้นหา "dbt + Data Build Tool" ใน google search ปี 2019 - 2024
การค้นหา “dbt + Data Build Tool” ใน google search ปี 2019 – 2024

แต่ในประเทศไทย ยังไม่ค่อยมีคนพูดถึงเรื่องนี้เท่าไหร่ ใครเรียนรู้ก่อน ก็ได้ใช้ก่อน เก่งปุบปับตามที่แอดอธิบายไว้ในปรัชญา Suddenly Talented

🌵 เรานิยมใช้ dbt กับ ELT pipeline (เหมาะสำหรับ medium-big data) ตัวเดียวจบทำได้ครบทุกอย่างตั้งแต่ model, test, version และ document

The Analytics Engineer

แล้วตำแหน่งไหนต้องใช้ dbt บ้าง? ในคอร์ส Intro to dbt ของ datacamp บอกว่าสามตำแหน่งที่จะได้ใช้ dbt แน่ๆคือ

  • Analytics Engineers
  • Data Analysts
  • Data Engineers

Analytics Engineer คือตำแหน่งใหม่ล่าสุดของโลก data analytics ที่ผสมผสานความรู้ด้าน data กับ software engineering อย่างลงตัว

อ้างอิงจาก Coursera นิยามของ role นี้คือ

Make sure that companies can understand their data and use it to solve problems, answer questions, or make decisions

ถ้าแอดเขียน workflow ของ modern data team จะเขียนได้แบบนี้

Data Engineer > Analytics Engineer > Data Analyst > Business Users

AE ช่วยปั้น data models ส่งต่อให้ DA วิเคราะห์ข้อมูล ส่งต่อ insights ให้ end users (ในอนาคตแอดคิดว่า AE อาจจะรวมกับ DA กลายเป็น Role เดียวจบในตัว)

ส่วน data scientists กับ ML engineers จะไม่ได้ใช้ tool นี้เท่าไหร่ สองตำแหน่งนี้จะเน้นสร้างโมเดลสถิติ ML/ AI เพื่อตอบโจทย์ธุรกิจเป็นหลัก

How to Get Started with dbt

dbt มีให้ใช้งานสองเวอร์ชันคือ Core เป็น open-source และ Cloud เป็น managed service จ่ายเงินใช้ได้บนเว็บ เริ่มต้นที่ $100 สำหรับ team plan (มีนาคม 2024)

เวอร์ชัน Cloud มี free-tier developer plan ให้ลองใช้งาน สร้างได้ 3,000 models ต่อเดือน ใครอยากฝึกใช้งาน ลองดู plan นี้ได้นะครับ

dbt DAG workflow
dbt DAG workflow

พื้นฐานที่ต้องรู้ก่อนเริ่มใช้งาน dbt มี 4 อย่าง

  • SQL
  • Basic Command Line
  • Basic Git – version control
  • Basic YAML – Yet Another Markup Language

ภาษาที่สำคัญที่สุดในงาน Analytics Engineering คือ SQL แค่เขียน SQL เป็นก็ทำได้ทุกอย่างแล้ว ตั้งแต่สร้างโมเดล เขียน test หรือสร้าง functions ใหม่บน dbt

ส่วน YAML เป็น human-readable text file ที่เราใช้เขียน configuration เป็นไฟล์ที่นิยมใช้กันในงาน CI/CD, docker, software deployment เป็นต้น

🌵 dbt Core เวอร์ชัน 1.3 เป็นต้นไป รองรับ Python models แล้ว แต่แอดแนะนำว่าอยู่กับ SQL ยาวๆดีกว่า เขียนง่ายกว่าเยอะ เย้ 555+

dbt Project

วิธีการสร้าง dbt project ใช้คำสั่ง dbt init ใส่ชื่อโปรเจ็ค และประเภทของ database หรือ data warehouse ที่เราต้องทำงานด้วย

dbt init
set up dbt project in one command
set up dbt project in one command

พอรันคำสั่ง dbt init เสร็จแล้ว dbt จะสร้าง 6 folders ย่อยในโปรเจ็คดังนี้

  • analyses
  • macros
  • models
  • seeds
  • snapshots
  • tests

Folders ที่เราใช้บ่อยๆคือ models, seeds และ tests

เราสามารถกำหนด profiles ได้หลายอันในแต่ละโปรเจ็ค เช่น development, staging, production เขียน config ไว้ในไฟล์ profiles.yml ตัวอย่างเช่น

nyc_yellow_taxi:
outputs:
dev:
type: duckdb
path: dbt.duckdb
target: dev

หมดยุค analysts ที่ทำเป็นแต่ data แล้ว ทุกวันนี้ต้องรู้เรื่อง software ด้วย

Analytics Engineering ประยุกต์ใช้ความรู้จาก Software Engineering หลายอย่าง เช่น การทำ version control มองโค้ดที่เราเขียนเป็น asset ของบริษัท

การเขียน code แบบสะอาด จัดการง่ายด้วยคอนเซ็ปต์ modularity

หรือการกำหนด profiles ว่า environment ตัวไหนใช้ dev/ test และตัวไหนใช้ขึ้น production จริงๆ คนจริงอย่างเรา test บน production เท่านั้น ยั๊งงง 555+

พอสร้าง project เสร็จแล้ว ใช้คำสั่ง dbt debug เพื่อทดสอบการเชื่อมต่อไปที่ database หรือ warehouse ที่เราต่อไว้ “All checks passed!” ก็ไปต่อได้ เย้

dbt debug
dbt debug ทดสอบ connection ไปที่ database/ warehouse
dbt debug ทดสอบ connection ไปที่ database/ warehouse

🌵 แอดคิดว่าที่มาของชื่อ Analytics Engineering เกิดมาจาก [Data Analytics] + [Software Engineering] ผสมผสานสองศาสตร์อย่างลงตัว

ถ้า data analyst อยากจะพัฒนาเป็น analytics engineer แค่เรียนพื้นฐาน software engineering เพิ่มขึ้น เช่น git, command line, yaml ก็ย้ายมา AE ได้แล้ว เย้

dbt Workflow

อ้างอิงจากเนื้อหาคอร์ส Intro to dbt การทำงานกับ dbt แบ่งได้เป็น 6 ขั้นตอน

  1. สร้างโปรเจ็คใหม่ด้วย dbt init
  2. เขียน configuration ต่างๆใน profiles.yml
  3. ออกแบบ data model, template ที่เราต้องการ
  4. รันคำสั่ง dbt run เพื่อ materialize tables, views ที่ target database
  5. ทดสอบคุณภาพข้อมูลด้วย dbt test
  6. ทำซ้ำขั้นตอนที่ 1-5 ไปเรื่อยๆ เวลาได้รับ requirements ใหม่

Analytics Engineer จะใช้เวลากับขั้นตอนที่สาม “data modeling” นานที่สุดเลยบน dbt environment ตรงนี้จะใช้ความรู้ database, ERD, SQL แบบเต็มๆ

ตัวอย่าง data model ง่ายๆจาก PopSQL

ถ้าเราทำขั้นตอนที่ 1-3 ออกแบบ models ที่ต้องการเสร็จแล้ว ขั้นตอนที่สี่ ให้ใช้คำสั่ง dbt run เพื่อ materialize models ไปที่ target database

ต่อด้วยคำสั่ง dbt test เพื่อทดสอบ quality ว่าเป็นไปตามที่เรากำหนดหรือเปล่า ถ้าจะ test แค่บางโมเดล ใช้ flag --select ตามด้วยชื่อโมเดล ทำไมง่าย 555+

dbt run
dbt test
dbt test --select "one_specific_model"

ถ้าเรามีการปรับ code หรืออัปเดต models ก็ต้องรันคำสั่ง dbt run ใหม่ทุกครั้ง

มาทำความรู้จักกับคำศัพท์ที่เราใช้ใน dbt project สำหรับผู้เริ่มต้น เช่น

  • Sources – ข้อมูลต้นทางที่เราจะเอามาสร้าง models เข้า data warehouse
  • Tables – ตารางที่เราใช้เก็บข้อมูลจริงๆ สามารถ query ข้อมูลได้เร็ว
  • Views – ไม่มีการเก็บข้อมูลใน storage แต่เป็น SQL query ที่เราสามารถรันกับ database ได้ เป็นตัว default materialization ของ dbt
  • Materialization – อธิบายง่ายๆคือการเปลี่ยน conceptual models ให้กลายเป็นสิ่งที่จับต้องได้จริง เช่น การทำ materialize views หรือ tables
  • DAG หรือ Directed Acyclic Graph – ใช้แสดงความสัมพันธ์ของ models
ตัวอย่าง DAG จากเว็บไซต์ dbt
ตัวอย่าง DAG จากเว็บไซต์ dbt

📂 อ่านคำศัพท์ technical อื่นๆของ dbt ได้ที่ dbt glossary

dbt Commands

Commands ของ dbt ที่เราใช้บ่อยๆ มีอยู่ 8 คำสั่งคือ

  • dbt init – สร้างโปรเจ็คใหม่
  • dbt run – สร้างโมเดล materialization ที่ target database
  • dbt test – ทดสอบข้อมูลในโมเดล
  • dbt seed – โหลดไฟล์ CSV เข้าไปใน database
  • dbt snapshot – บันทึกการเปลี่ยนแปลงของข้อมูลใน models
  • dbt docs – สร้าง documentation ของโปรเจ็ค
  • dbt build – รวบ commands ที่สร้าง models, seeds, snapshots, tests จบในคำสั่งเดียว สะดวกมากๆตอนขึ้น production
  • dbt debug – ทดสอบ connection ไปที่ database/ data warehouse

ไว้บทความหน้า แอดมาเขียนอธิบายทุกคำสั่งแบบละเอียดอีกที เฉียบ 🙂

dbt Models

Models ใน dbt คือการเขียน SELECT query เพื่อทำ transformation รูปแบบต่างๆ เช่น การสร้างคอลัมน์ใหม่ ฟิลเตอร์ข้อมูล JOIN tables หรือ aggregate data ก็ได้

แต่ละ model จะเป็นไฟล์นามสกุล .sql ตัวอย่างเช่น

SELECT
firstname,
lastname,
country
FROM {{ source('tesco', 'customers') }}
WHERE country = 'Thailand';

🌵 source() คือฟังก์ชันสำหรับอ้างอิง raw data tables ที่เราจะเอามาสร้าง data models โดย dbt จะ compile template ด้านบนเป็น SQL statement แบบนี้

SELECT
firstname,
lastname,
country
FROM raw.tesco.customers
WHERE country = 'Thailand';

ในคอร์ส datacamp เค้าสอนใช้ DuckDB เป็น database จะมีฟีเจอร์พิเศษ อ่านข้อมูลจากไฟล์ parquet ได้ง่ายๆด้วยฟังก์ชัน read_parquet()

SELECT *
FROM read_parquet('filename.parquet')

📂 สำหรับเพื่อนๆที่สนใจศึกษาต่อ อ่านการสร้าง models ได้ที่ dbt SQL models

dbt Tests

dbt มาแนว TDD เลย test driven development

Tests คือการทดสอบว่าข้อมูลใน models เป็นไปตามเงื่อนไขหรือ business logics ที่เรากำหนดหรือเปล่า ศัพท์เทคนิคเราเรียกว่า “assertions” เกี่ยวกับ models

การเขียน tests ของ dbt จะมีสามแบบ

  • Built-in (เหมือน constraints ในภาษา SQL)
    • unique
    • not_null
    • accepted_values
    • relationships
  • Singular
  • Generic

Built-In คือ tests ที่มีให้เราใช้งานได้เลยใน dbt ไม่ต้องเขียนอะไรเพิ่ม ตัวอย่างเช่น การเขียนเช็ค accepted_values ของคอลัมน์ status ใน model orders

models:
- name: orders
columns:
- name: status
tests:
- accepted_values:
values: ['shipped', 'completed', 'returned']

ถ้าเราต้องการกำหนดให้คอลัมน์ spending ไม่สามารถติดลบได้ เราต้องเขียน Singular Test ด้วยภาษา SQL และ save ไว้ใน folder tests แบบนี้

-- tests/assert_spending_cannot_be_negative.sql
SELECT spending
FROM {{ ref('fct_transactions') }}
WHERE spending < 0

ส่วน Generic Test คือการเขียน function ที่เอาไปใช้กับ model และ column อื่นๆได้ เขียนใน dbt ด้วย Jinja template และ placeholder {{...}} เช่น

{% test not_negative(model, column_name) %}

select *
from {{ model }}
where {{ column_name }} < 0

{% endtest %}

ทั้ง singular และ generic tests ถ้ามี records ออกมาตามเงื่อนไขที่เราเขียน ในตัวอย่างด้านบนคือ value < 0 ตัว test จะส่งค่า “failed” กลับมาทันที

🌵 Jinja คือ templating language ที่เปลี่ยนโปรเจ็ค dbt กลายเป็น programming environment สำหรับภาษา SQL ได้เลย โหดมาก

dbt Documentation

อีกหนึ่งฟีเจอร์ของ dbt คือการสร้าง documentation เพื่อบันทึกงานทั้งหมดที่เราทำใน project ตั้งแต่การสร้าง models, columns, tests, data lineage และ DAG

ตัวอย่าง dbt docs แสดง models, lineage, DAG สวยๆ
ตัวอย่าง dbt docs แสดง models, lineage, DAG สวยๆ

สร้าง docs ง่ายๆ แค่พิมพ์คำสั่ง dbt docs generate ก็เสร็จเลย เหลือเชื่อ 555+

dbt docs generate

เราสามารถนำไฟล์ docs นี้ไป host บน server ของเราเอง เช่น บน Amazon S3, Nginx หรือ dbt cloud (option นี้ง่ายสุด) แชร์ต่อให้ทีมก็ได้ สบายๆ

🌵 เราใช้คำสั่ง dbt docs หลังจาก dbt run รันเสร็จแล้ว

dbt Learning Resources

แหล่งเรียนรู้ dbt ที่ดีที่สุดสำหรับแอดคือ dbt docs เข้าไปนั่งอ่าน มีทุกอย่างที่ต้องรู้ ทีมงานทำ docs มาดีมากๆ (world class) งานละเอียด ตัวอย่างเพียบ

Daily Tip – อยากเรียนรู้เรื่องใหม่ๆได้ไว ต้องฝึกอ่านเยอะๆ

dbt documentation

แต่ถ้าใครอยากเรียนแบบคอร์สออนไลน์ แอดแนะนำ 3 ที่นี้

บน dbt learn เว็บไซต์ทางการของ dbt มีคอร์ส video เพียบ เรียนฟรี สอบผ่านมี certificate ให้ด้วย เนื้อหาจุกๆ สอนครบทุก skills ตั้งแต่เริ่มต้นถึง deployment

Udemy เริ่มมีคนทำคอร์ส dbt มาลงบ้างแล้ว เช่น The Complete dbt Bootcamp และ 2024 Masktering dbt – From Beginner to Pro

แต่คุณภาพจะหลากหลายหน่อย แอดเคยเจอ อ. บางคนสำเนียงฟังยากมาแนวยุโรป ต้องเปิด sub อ่านด้วย 555+ อ่านรีวิวก่อนสมัครคอร์สอีกทีนะครับ 🙂

คอร์ส dbt บน Udemy
คอร์ส dbt บน Udemy

🌵 ใครอยากเรียนแบบ live classes ลองดูบน Uplimit (ชื่อเก่าคือ Corise) แอดเคยลงเรียนพร้อมกับพี่กาน @zkancs Data Engineer Cafe ปีที่แล้ว

สอนโดย Emily Hawkins – dbt professional เนื้อหาดีมาก ได้ลองทำโปรเจ็คบน Gitpod เรียนเต็มๆ 4 สัปดาห์ ดีทุกอย่าง แต่ค่าคอร์ส $400 จนแล้ว 555+

และที่สุดท้ายคือ datacamp คนดีคนเดิมของแอด 555+

dbt Certificate on DataCamp

ถ้าใครอยากเรียน dbt แบบใช้เวลาไม่นาน 3-4 ชั่วโมง มีโปรเจ็คให้ลองทำจริง เขียน code บน web browser สอบผ่านได้รับ certificate นำไปใส่เป็น portfolio ได้

แอดแนะนำคอร์ส Introduction to dbt บน datacamp เต็ม 10/10 ไม่หัก สอนโดยคุณ Mike Metzger – Data Engineer Consultant ประสบการณ์ 20 ปี

dbt certification บน datacamp
dbt certification บน datacamp

เนื้อหาในคอร์ส แบ่งเป็น 4 modules

  • Welcome to dbt (Free Preview)
  • dbt models
  • Testing & documentation
  • Implementing dbt in oroduction

ทุกคอร์สของ datacamp จะเปิดให้เรียนฟรี module แรก คุ้มแล้ว 555+ รูปแบบการสอนจะเป็นวีดีโอ สลับกับ reading, quiz และ coding assignment

ส่วนตัวแอดเชื่อว่า dbt (data transformation/ model) จะเป็นหนึ่งในทักษะพื้นฐานของ data analysts และ analytics engineers อย่างแน่นอนอีกไม่กี่ปีข้างหน้า

แปลว่า เรียนเถอะ แอดเขียนมาขนาดนี้ เอาหน่อย 555+✌️

datacamp user interface
datacamp user interface

ฟีเจอร์ใหม่บนโรงเรียนทำดีขึ้นเยอะเลย วีดีโอไม่หน่วงเหมือนแต่ก่อน เปิด slide ดูได้ทุกบทเรียน บางคอร์สมีเพิ่ม sub thai แล้ว ไม่ต้องกังวลเรื่องภาษา

ส่วนตัวแอดยกให้ datacamp คือโรงเรียน data science ที่ดีที่สุดในโลก โดยเฉพาะในช่วงราคา range 50-99 USD ต่อปี (สมัครตอนช่วงโปร) คุ้มสุด

Honest Review – ในบ้านเรา แอดคิดว่าไม่มีคอร์สไหนคุ้มเท่าเรียนบน datacamp อีกแล้ว ขนาด bootcamp ที่แอดเปิดสอนก็สู้ไม่ได้ พูดจริงๆ 555+

Duck Score

Duck Score คะแนนรีวิวแบบเป็ดๆ เย้
คะแนนรีวิวแบบเป็ดๆ เย้

⭐ โดยรวมแอดชอบมากคอร์ส Introduction to dbt คุณภาพ 10/10 ความคุ้มค่า 10/10 ได้คะแนนเป็ดรีวิวเต็มสิบ เย้ เพื่อนๆที่สนใจ ลุยได้ ไม่ผิดหวังแน่นอน

Modern data analysts are increasingly moving beyond just building dashboards

บทความนี้แอดรีวิว overview features ของ dbt ยังมี details อื่นๆให้เรียนอีกเยอะมาก เช่น sources, jinja templates, macros, seeds และ snapshots

sources:
- name: jaffle_shop
database: raw
schema: jaffle_shop
tables:
- name: orders
- name: customers

- name: stripe
tables:
- name: payments

Analytics Engineering และ dbt คือก้าวต่อไปของ modern data stack แน่นอน data analysts อย่างพวกเราควรเรียนอย่างยิ่ง มา upskill ทักษะนี้ด้วยกันนะครับ

ใครอยากอ่านบทความ dbt อีก คอมเม้นต์บอกแอดหน่อยน๊า แอดอ่านเองทุก comments เลย ขอบคุณที่ติดตามอ่าน blog ของเรานะครับ ❤️

PS. บทความถัดไปแอดเตรียมเขียนรีวิว แชร์ประสบการณ์เรียน DataCamp มากกว่า 5 ปี หลายๆอย่างที่ทำได้ตอนนี้ เรียนมาจากที่นี่ทั้งนั้น โดยเฉพาะ R, SQL 555+

4 responses to “dbt เครื่องมือใหม่มาแรงสำหรับงาน Analytics Engineering”

  1.  Avatar
    Anonymous

    น่าติดตามมากบทความต่อไปมากเลยครับแอด #dbt

  2. Potae Zang Avatar

    เนื้อหาน่าติดตามมากเลยครับแอด #dbt

    1. Kasidis Satangmongkol Avatar

      ขอบคุณครับคุณ Potae 🤟

  3.  Avatar
    Anonymous

    แอดทอยเทียบตัวนี้กับ cube.js ให้หน่อยครับ

Leave a Reply

Discover more from DataRockie

Subscribe now to keep reading and get access to the full archive.

Continue reading