การตั้งค่าโปรเจกต์ dbt และการโหลดข้อมูล

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

Susan Sun

Freelance Data Scientist

ทบทวน: การตั้งค่าและเริ่มต้น dbt

ติดตั้ง dbt

pip install dbt

สร้างโปรเจกต์ dbt ชื่อ looker_ecommerce

dbt init looker_ecommerce

ตรวจสอบการตั้งค่า

cd looker_ecommerce
dbt debug

โครงสร้างไฟล์ที่ dbt สร้างให้อัตโนมัติ:

ภาพซ้ำจากบทเรียนก่อนหน้า แสดงโครงสร้างไดเรกทอรีที่ dbt init สร้างให้อัตโนมัติ โฟลเดอร์หลักชื่อ looker e-commerce มีโฟลเดอร์ย่อยได้แก่ analyses, macros, models, seeds, snapshots และ tests รวมถึงไฟล์เบ็ดเตล็ดสามไฟล์คือ gitignore, dbt project yaml และ readme markdown

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

ทำความรู้จักข้อมูล: ศูนย์กระจายสินค้า

  • distribution_centers.csv มีขนาดเล็กและไม่เปลี่ยนแปลงบ่อย มีเพียง 10 แถว

  • ตัวอย่างข้อมูลดิบจากไฟล์ distribution_centers.csv

ตัวอย่างไฟล์ข้อมูล distribution center แสดงข้อมูล 3 แถวและ 4 คอลัมน์ ชื่อคอลัมน์ได้แก่ id, name, latitude และ longitude

  • id: รหัสเฉพาะของศูนย์กระจายสินค้าแต่ละแห่ง
  • name: ชื่อศูนย์กระจายสินค้า
  • latitude: พิกัดละติจูดของศูนย์กระจายสินค้า
  • longitude: พิกัดลองจิจูดของศูนย์กระจายสินค้า
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

ทำความรู้จักข้อมูล: คำสั่งซื้อ

orders.csv มีขนาดใหญ่และอัปเดตอยู่เสมอ มี 125,000 แถวและ 9 คอลัมน์

  • order_id: รหัสเฉพาะของแต่ละรายการสั่งซื้อ
  • user_id: รหัสผู้ใช้ที่สั่งซื้อ
  • status: สถานะของคำสั่งซื้อ
  • gender: เพศของผู้ใช้
  • created_at: เวลาที่สร้างคำสั่งซื้อ
  • returned_at: เวลาที่คืนสินค้า
  • shipped_at: เวลาที่จัดส่งสินค้า
  • delivered_at: เวลาที่ส่งสินค้าสำเร็จ
  • num_of_items: จำนวนสินค้าในคำสั่งซื้อ
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

ทำความรู้จักข้อมูล: คำสั่งซื้อ

ตัวอย่างข้อมูลดิบจากไฟล์ orders.csv:

ตัวอย่างไฟล์ข้อมูล 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

การตั้งค่าแหล่งข้อมูลดิบและข้อมูล seed

Distribution center ไฟล์ข้อมูลดิบ:

  • ลักษณะข้อมูล:
    • ไฟล์ CSV ขนาดเล็ก
    • ข้อมูลเปลี่ยนแปลงช้า

Orders ไฟล์ข้อมูลดิบ:

  • ลักษณะข้อมูล:
    • ชุดข้อมูลขนาดใหญ่
    • ข้อมูลเปลี่ยนแปลงเร็ว
  • วิธีโหลดด้วย dbt:
    • dbt seed
    • โหลดเป็นไฟล์ครั้งเดียว
  • วิธีโหลดด้วย dbt:
    • dbt source
    • เชื่อมต่อกับ DuckDB
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

การตั้งค่าแหล่งข้อมูลดิบและข้อมูล seed

dbt init สร้างโครงสร้างไฟล์พื้นฐานให้อัตโนมัติ:

looker_ecommerce/
  macros/
  models/
  seeds/
  snapshots/
  tests/
  dbt_project.yml
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

การตั้งค่าแหล่งข้อมูลดิบและข้อมูล seed

โหลด distribution_center เป็น seed:

looker_ecommerce/
  macros/
  models/
    stg_looker__distribution_centers.sql
  seeds/
    looker__distribution_centers.csv
  snapshots/
  tests/
  dbt_project.yml

ใน stg_looker__distribution_centers.sql:

SELECT 
  id,
  name,
  latitude,
  longitude
FROM 
 {{ref('looker__distribution_centers')}}
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

การตั้งค่าแหล่งข้อมูลดิบและข้อมูล seed

โหลด orders เป็น source:

looker_ecommerce/
  macros/
  models/
    stg_looker__orders.sql
  seeds/
  snapshots/
  tests/
  dbt_project.yml

ใน stg_looker__orders.sql:

SELECT *
FROM 
{{source('looker_ecommerce', 'orders')}}
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

การจัดทำเอกสาร sources และ staging models

การจัดทำเอกสาร sources:

looker_ecommerce/
  macros/
  models/
    _looker__sources.yml
  seeds/
  snapshots/
  tests/
  dbt_project.yml

ใน _looker__sources.yml:

version: 2

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

การจัดทำเอกสาร sources และ staging model

  • ตัวอย่างไฟล์ _looker__models.yml ในไดเรกทอรี models เดียวกัน:
version: 2

models:
  - name: stg_looker__distribution_centers
    description: Distribution center name and location    

  - name: stg_looker__orders
    description: Order information such as order status
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Sources, seeds, models และ yaml

looker_ecommerce/
  macros/
  models/
    _looker__models.yml
    _looker__sources.yml
    stg_looker__distribution_centers.sql
    stg_looker__orders.sql
  seeds/
    looker__distribution_centers.csv
  snapshots/
  tests/
  dbt_project.yml
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

ทบทวน: คำสั่งย่อยของ dbt

โหลดไฟล์ CSV เป็น seed files

dbt seed

สร้างหรืออัปเดตโมเดลทั้งหมดในโปรเจกต์ dbt

dbt run

สร้างหรืออัปเดตเฉพาะโมเดลที่ระบุ

dbt run --select model

รันการทดสอบทั้งหมดในโปรเจกต์ dbt

dbt test 

รันการทดสอบสำหรับโมเดลที่ระบุ

dbt test --select model

รวม dbt run และ dbt test ไว้ในคำสั่งเดียว!

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

ทบทวน: แนวปฏิบัติที่ดี

รูปแบบการตั้งชื่อ models:

  • ใช้ขีดล่างคู่เพื่อแยกชื่อแหล่งข้อมูลออกจากชื่อโมเดล
  • <data_source>__<model_name>.sql

ตัวอย่าง

  • stg_looker__distribution_centers.sql
  • stg_looker__orders.sql

รูปแบบการตั้งชื่อไฟล์ yaml:

  • ขึ้นต้นด้วยขีดล่างตัวเดียว
  • ใช้ขีดล่างคู่เพื่อแยกชื่อแหล่งข้อมูลออกจากชื่อ artifact
  • _<data_source>__<artifact_type>.yml

ตัวอย่าง

  • _looker__models.yml
  • _looker__sources.yml
1 https://docs.getdbt.com/best-practices
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

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

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

Preparing Video For Download...