การเอา value มาสร้างเป็น variable เป็นการช่วยสื่อความหมายของ value นั้น ๆ ให้ชัดเจนมากขึ้น แถมยังช่วยให้ query อ่านง่าย เป็นระเบียบ สามารถเรียกใช้ value นั้นซ้ำได้หลายจุด และยังสามารถปรับเปลี่ยน value นั้น ๆ ได้โดยง่ายอีกด้วย
นี่คือการใช้ variables ใน dbt model ทั้ง 2 วิธีที่ผมใช้อยู่ครับ
1. Var
กำหนด variable ไว้ในไฟล์ dbt_project.yml
หรือกำหนดผ่าน command line
แล้วเรียกใช้ผ่าน {{ var(...) }}
วิธีนี้ variables จะเข้าถึงได้แบบ global ทั้งใน models, tests และอื่น ๆ ช่วยให้อ้างอิง variable จากหลาย ๆ components ได้อย่างมีประสิทธิภาพ
ตัวอย่าง การกำหนด variable ในไฟล์ dbt_project.yml
name: my_dbt_project
version: 1.0.0
config-version: 2
# define variables here
vars:
event_type: activation
สามารถกำหนด scope ได้เพิ่มเติม
ตัวอย่าง การกำหนด variable ผ่าน command line
วิธีนี้เหมาะสำหรับ value ที่เปลี่ยนแปลงบ่อย ๆ เช่น date ranges
$ dbt run --vars '{"event_type": "activation"}'
การใช้ --vars
ป็นการ override value ที่กำหนดไว้ใน dbt_project.yml
ด้วย
ตัวอย่าง การใช้งาน
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 นั้น ๆ
ตัวอย่าง การใช้งาน
{% set event_type = 'activation' %}
SELECT
*
FROM
events
WHERE
event_type = '{{ event_type }}'
ส่วนเรื่อง Environment variables น่าจะไม่ค่อยได้ใช้ที่ models สามารถศึกษาเพิ่มเติมได้ที่นี่เลยครับ
References