การสร้าง dbt data marts และ snapshot models

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Susan Sun

Freelance Data Scientist

แนะนำ dbt data mart models

Data marts คือโมเดลข้อมูลที่สะอาดและเข้าถึงได้ง่ายที่ปลาย pipeline

กรณีการใช้งาน

  • Feature stores สำหรับทีม data science
  • KPI แบบรวมสำหรับทีมการเงิน
  • Latency metric สำหรับทีมวิศวกรรม
  • ลดการซ้ำซ้อนโดยเก็บ SQL ไว้เป็นโค้ด
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Looker e-commerce data marts

Customers

ตอบคำถาม:

ลูกค้าของเราคือใคร?

พฤติกรรมการซื้อของพวกเขาเป็นอย่างไร?

ระดับข้อมูล:

หนึ่งแถวต่อลูกค้าหนึ่งราย

คอลัมน์ตัวอย่าง:

ชื่อลูกค้า, ยอดเงินที่ลูกค้าใช้จ่าย

Products

ตอบคำถาม:

รายได้ ต้นทุน และกำไรของเราเป็นเท่าใด?

ระดับข้อมูล:

หนึ่งแถวต่อสินค้าหนึ่งรายการ

คอลัมน์ตัวอย่าง:

หมวดหมู่สินค้า, รายได้, กำไร

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Looker e-commerce data marts

แผนภาพ directed acyclic graph แสดง dbt sources และ models ทั้งหมดพร้อมความสัมพันธ์ระหว่างกัน โดย Sources แสดงเป็นสีเขียว ส่วน Models และ marts แสดงเป็นสีน้ำเงิน

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

การสร้างทีละขั้นตอน

ขั้นตอนที่ 1: ปรับแต่ง SQL logic นอก dbt ก่อน แล้วจึงแทนที่การอ้างอิงด้วย dbt syntax

ภาพหน้าจอของไฟล์ SQL logic ตัวอย่างที่มี CTE หลายรายการ

ขั้นตอนที่ 2: สร้าง data tests และ docs

ภาพหน้าจอของไฟล์ YAML ของ dbt models ตัวอย่าง แสดงคำอธิบายตารางและคอลัมน์ของ dbt model

ขั้นตอนที่ 3: ทดสอบการ build! (เช่น dbt build)

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

แนะนำ dbt snapshot models

สถานะคำสั่งซื้อ 5 แบบ:

Processing, Shipped, Complete, Cancelled และ Returned

ตัวอย่างข้อมูล:

ตัวอย่างไฟล์ข้อมูล orders ที่มี 2 แถวข้อมูลและ 9 คอลัมน์ ชื่อคอลัมน์ได้แก่ order id, user id, status, gender, created at, returned at, shipped at, delivered at และ num of items

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Orders: ติดตามการเปลี่ยนแปลงสถานะด้วย snapshot

  • สร้างไฟล์ orders_snapshot.sql
{% snapshot orders_snapshot %}
{{
    config(target_schema='main',
      unique_key='order_id',
      strategy='timestamp',
      updated_at='created_at')
}}

SELECT * 
FROM 
{{source('looker_ecommerce', 'orders')}}

{% endsnapshot %}
  • รัน snapshot model เฉพาะตัว
dbt snapshot -s orders_snapshot.sql
  • รัน snapshot models ทั้งหมด
dbt snapshot
  • รันโมเดลทั้งหมด (รวม snapshots)
dbt build
1 https://docs.getdbt.com/docs/build/snapshots
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

มาฝึกกันเถอะ!

กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Preparing Video For Download...