dbt के साथ jinja का उन्नत उपयोग

Case Study: dbt के साथ E-Commerce Data Models बनाना

Susan Sun

Freelance Data Scientist

Jinja स्टेटमेंट: लूप

Jinja statements {% %} में होते हैं:

  • आइटम्स पर लूप करें
    • टेम्पलेट:
      {% for ... %} ... {% endfor %}
      
    • उदाहरण:
      {% for order_status in order_statuses %}
        SUM(
            CASE WHEN status = '{{ order_status }}' 
              THEN order_id 
            END)
      {% endfor %}
      
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: लूप

दोहरता SQL:

SELECT 
    user_id,
    SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) 
        AS num_orders_Shipped,
    SUM(CASE WHEN status = 'Complete' THEN 1 ELSE 0 END) 
        AS num_orders_Complete,
    SUM(CASE WHEN status = 'Processing' THEN 1 ELSE 0 END) 
        AS num_orders_Processing,        
FROM {{ ref('stg_looker__orders') }}
GROUP BY 1
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: लूप

{% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}

SELECT 
    user_id,
    -- Jinja loop
    {% for order_status in order_statuses %}
        SUM(CASE WHEN status = '{{ order_status }}' THEN 1 ELSE 0 END) 
        -- Parametrized column name
        AS num_orders_{{ order_status }}
    {% endfor %}
FROM {{ ref('stg_looker__orders') }}
GROUP BY 1
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: लूप

dbt compile आउटपुट:

SELECT 
    user_id,
    SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) 
        AS num_orders_Shipped,
    SUM(CASE WHEN status = 'Complete' THEN 1 ELSE 0 END) 
        AS num_orders_Complete,
    SUM(CASE WHEN status = 'Processing' THEN 1 ELSE 0 END) 
        AS num_orders_Processing,        
FROM "dbt"."main"."stg_looker__orders"
GROUP BY 1
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: मैक्रोज़

एक Jinja मैक्रो:

  • Jinja में लिखा एक फंक्शन होता है
  • पुन: उपयोग योग्य है
  • /macros फोल्डर में स्टोर होता है

COALESCE():

  • पहला non-null मान लौटाता है
  • सिंटैक्स: COALESCE(value1, value2, ...)
  • जैसे COALESCE(nickname, first_name)

एक मैक्रो फंक्शन का उदाहरण:

IDE का स्क्रीनशॉट, जिसमें IDE एडिटर में `coalesce_and_round.sql` फ़ाइल खुली है और उसका मैक्रो लॉजिक दिख रहा है.

Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: मैक्रोज़

Jinja statements {% %} में होते हैं:

  • पुन: उपयोग योग्य macro फंक्शन:
    • टेम्पलेट:
      {% macro ... %} ... {% endmacro %}
      
    • उदाहरण:
      {% macro coalesce_and_round(column_name, decimal_places = 2) %}
            ROUND(COALESCE({{ column_name }}, 0), {{ decimal_places }})
      {% endmacro %}
      
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja स्टेटमेंट: मैक्रोज़

  • दोहरता SQL
    ROUND(COALESCE(sales_amount, 0), 2) AS sales_amount,
    ROUND(COALESCE(cost_of_goods_sold, 0), 2) AS cost_of_goods_sold,
    
  • DRY (Don't Repeat Yourself)
    • coalesce_and_round.sql नाम का मैक्रो बनाएँ
    • /macros में स्टोर करें
    • ऐसे कॉल करें:
      {{ coalesce_and_round('sales_amount', 2) }} AS sales_amount,
      {{ coalesce_and_round('cost_of_goods_sold', 2) }} AS cost_of_goods_sold,
      
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja whitespace प्रबंधन

जैसा लिखा है:

{% set traffic_source_values = ['Adwords', 'Email', 'Facebook'] %}
{% set browser_values = ['Chrome', 'Firefox', 'Safari', 'IE', 'Other'] %}

SELECT 
    user_id,
    COUNT(DISTINCT session_id) AS num_web_sessions,
...
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja whitespace प्रबंधन

कम्पाइल होने पर:




SELECT 
    user_id,
    COUNT(DISTINCT session_id) AS num_web_sessions,
... 
Case Study: dbt के साथ E-Commerce Data Models बनाना

Jinja whitespace प्रबंधन

  • {%- ... %} पहले वाला whitespace हटाता है.
  • {% ... -%} बाद वाला whitespace हटाता है.
  • {%- ... -%} दोनों हटाता है.

  • उदाहरण:

{%- set traffic_source_values = ['Adwords', 'Email', 'Facebook'] -%}
{%- set browser_values = ['Chrome', 'Firefox', 'Safari', 'IE', 'Other'] -%}

SELECT 
    user_id,
    COUNT(DISTINCT session_id) AS num_web_sessions,
...
Case Study: dbt के साथ E-Commerce Data Models बनाना

अभ्यास करते हैं!

Case Study: dbt के साथ E-Commerce Data Models बनाना

Preparing Video For Download...