Using variables in the dbt model

การเอา value มาสร้างเป็น variable เป็นการช่วยสื่อความหมายของ value นั้น ๆ ให้ชัดเจนมากขึ้น แถมยังช่วยให้ query อ่านง่าย เป็นระเบียบ สามารถเรียกใช้ value นั้นซ้ำได้หลายจุด และยังสามารถปรับเปลี่ยน value นั้น ๆ ได้โดยง่ายอีกด้วย

นี่คือการใช้ variables ใน dbt model ทั้ง 2 วิธีที่ผมใช้อยู่ครับ :wink:

1. Var

กำหนด variable ไว้ในไฟล์ dbt_project.yml หรือกำหนดผ่าน command line แล้วเรียกใช้ผ่าน {{ var(...) }} วิธีนี้ variables จะเข้าถึงได้แบบ global ทั้งใน models, tests และอื่น ๆ ช่วยให้อ้างอิง variable จากหลาย ๆ components ได้อย่างมีประสิทธิภาพ

:cactus: ตัวอย่าง การกำหนด variable ในไฟล์ dbt_project.yml

name: my_dbt_project
version: 1.0.0

config-version: 2

# define variables here
vars:
  event_type: activation

สามารถกำหนด scope ได้เพิ่มเติม

:cactus: ตัวอย่าง การกำหนด variable ผ่าน command line

วิธีนี้เหมาะสำหรับ value ที่เปลี่ยนแปลงบ่อย ๆ เช่น date ranges

$ dbt run --vars '{"event_type": "activation"}'

การใช้ --vars ป็นการ override value ที่กำหนดไว้ใน dbt_project.yml ด้วย

:cactus: ตัวอย่าง การใช้งาน

SELECT
  *
FROM
  events
WHERE
  event_type = '{{ var("event_type") }}'

-- default values
SELECT
  *
FROM
  events
WHERE
  event_type = '{{ var("event_type", "registration") }}'

2. Set

ใช้ {% set ... %} เพื่อกำหนด variables ไว้ด้านบนของ model ลักษณะคล้าย programming languages และเรียกใช้ผ่าน {{ ... }} วิธีนี้ variables จะเข้าถึงได้เฉพาะ model นั้น ๆ

:cactus: ตัวอย่าง การใช้งาน

{% set event_type = 'activation' %}

SELECT
  *
FROM
  events
WHERE
  event_type = '{{ event_type }}'

ส่วนเรื่อง Environment variables น่าจะไม่ค่อยได้ใช้ที่ models สามารถศึกษาเพิ่มเติมได้ที่นี่เลยครับ

References

3 Likes

ความฮาอยู่ตรง meme นี่แหละ :rofl:

1 Like