แนะนำ Jinja กับ dbt

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

Susan Sun

Freelance Data Scientist

dbt ใช้สามภาษา

dbt ใช้ภาษา สาม ภาษา:

  • SQL สำหรับการแปลงข้อมูล
  • YAML สำหรับการจัดทำเอกสารและทดสอบ
  • Jinja สำหรับการสร้างเทมเพลต
  • ตัวอย่าง SQL:

    SELECT * FROM ...
    
  • ตัวอย่าง YAML:

    - name: customers
      description: A data mart
    
  • ตัวอย่าง Jinja:

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

dbt Jinja คืออะไร

dbt Jinja คืออะไร?

  • ภาษาเทมเพลตแบบ Pythonic
  • ใช้สร้าง SQL แบบไดนามิก
  • พบได้ใน dbt models, macros, tests ฯลฯ

ทำไมจึงมีประโยชน์?

  • ช่วยให้ทำงานร่วมกันได้ดีขึ้น
  • ลดความซ้ำซ้อน (DRY) และนำโค้ดกลับมาใช้ใหม่ได้

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

  • การอ้างอิง dbt models

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • การสร้าง loop

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

ประเภทของ dbt Jinja

  1. Jinja statements ใช้ {%...%} ครอบ
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Jinja expressions ใช้ {{...}} ครอบ
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Jinja comments ใช้ {# #} ครอบ
     {# This is a comment #}
    
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Jinja statements: set

  • ประเภทของ Jinja statements: set, loop, conditional (if/else), macros ฯลฯ

  • Jinja statement แบบ set ใช้สร้างตัวแปรและกำหนดค่า

    • เทมเพลต:
      {% set ... %}
      
    • ตัวอย่าง:
      {% set country = 'Australia' %}
      
กรณีศึกษา: การสร้าง Data Model สำหรับ E-Commerce ด้วย dbt

Jinja และ dbt compile

การใช้งาน

  • ภายใน customers.sql ที่เขียนไว้:
{% set country = 'Australia' %}

SELECT ...
FROM ...
WHERE country = '{{ country }}'

โค้ดที่ Compiled แล้ว

  • ผลลัพธ์จาก dbt compile -s customers.sql:


SELECT ...
FROM ...
WHERE country = 'Australia'

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

Jinja และ dbt compile

  • ผลลัพธ์ใน Terminal สำหรับโมเดลเดียว
  • ผลลัพธ์จาก dbt compile -s customers.sql:
Running with dbt=1.8.4
...
Compiled node 'customers' is:
WITH customer_base AS (
    SELECT 
...
    FROM "dbt"."main"."stg_looker__users"
    WHERE country = 'Australia'
)
...
  • สร้างไดเรกทอรี /target/compiled
  • ไฟล์ที่ dbt compile สร้างขึ้น:

ภาพหน้าจอแสดงโครงสร้างไดเรกทอรีที่สร้างโดยอัตโนมัติจากคำสั่ง dbt compile โฟลเดอร์ระดับบนสุดคือโปรเจกต์ looker ecommerce dbt ระดับถัดมาคือ `target` และระดับที่สามคือ `compiled` ภายใต้ไดเรกทอรี `compiled` มีชุดไดเรกทอรีที่จำลองโครงสร้างโปรเจกต์ dbt ซึ่งเป็นที่เก็บคิวรีที่ compile แล้วสำหรับ models และ tests

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

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

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

Preparing Video For Download...