Giới thiệu Jinja với dbt

Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Susan Sun

Freelance Data Scientist

dbt dùng ba ngôn ngữ

dbt dùng ba ngôn ngữ:

  • SQL cho biến đổi dữ liệu
  • YAML cho tài liệu và kiểm thử
  • Jinja cho mẫu (templating)
  • Ví dụ SQL:

    SELECT * FROM ...
    
  • Ví dụ YAML:

    - name: customers
      description: A data mart
    
  • Ví dụ Jinja:

    FROM {{ ref('stg_looker__users') }}
    
Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

dbt Jinja là gì

dbt Jinja là gì?

  • Ngôn ngữ template kiểu Python
  • Dùng để tạo SQL động
  • Có trong models, macros, tests, v.v. của dbt

Tại sao hữu ích?

  • Hợp tác tốt hơn
  • Ít lặp lại (DRY), tái sử dụng cao hơn

Ví dụ Jinja trong dbt:

  • Tham chiếu các model dbt

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • Tạo vòng lặp

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Các loại Jinja trong dbt

  1. Câu lệnh Jinja nằm trong {%...%}
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Biểu thức Jinja nằm trong {{...}}
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Chú thích Jinja nằm trong {# #}
     {# This is a comment #}
    
Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Câu lệnh Jinja: set

  • Các loại câu lệnh Jinja: set, loop, conditional (if/else), macros, v.v.

  • Câu lệnh Jinja set tạo biến và gán giá trị.

    • Mẫu:
      {% set ... %}
      
    • Ví dụ:
      {% set country = 'Australia' %}
      
Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Jinja và dbt compile

Cách dùng

  • Trong customers.sql, như sau:
{% set country = 'Australia' %}

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

đã biên dịch

  • Kết quả dbt compile -s customers.sql:


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

Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Jinja và dbt compile

  • Kết quả terminal cho một model
  • Kết quả 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'
)
...
  • Thư mục /target/compiled được tạo
  • dbt compile tạo các file đã biên dịch:

Ảnh chụp màn hình các thư mục do lệnh dbt compile tạo tự động. Thư mục cấp cao nhất là dự án dbt looker ecommerce. Cấp hai là `target` và cấp ba là `compiled`. Bên trong `compiled` là các thư mục phản chiếu cấu trúc dự án dbt, nơi lưu các truy vấn đã biên dịch cho models và tests.

Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Ayo berlatih!

Nghiên cứu tình huống: Xây dựng mô hình dữ liệu E-Commerce với dbt

Preparing Video For Download...