Знайомство з Jinja в dbt

Кейс-стаді: створення моделей даних для 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') }}
    
Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Що таке dbt Jinja

Що таке dbt Jinja?

  • Пайтоноподібна мова шаблонів
  • Дозволяє динамічно генерувати SQL
  • Використовується в моделях, макросах, тестах тощо

Чому це корисно?

  • Краща співпраця
  • Менше повторів (DRY), більше багаторазового коду

Приклади Jinja в dbt:

  • Посилання на моделі dbt

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • Створення циклів

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Типи Jinja в dbt

  1. Оператори Jinja беруться в {%...%}
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Вирази Jinja беруться в {{...}}
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Коментарі Jinja беруться в {# #}
     {# This is a comment #}
    
Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Оператори Jinja: set

  • Типи операторів Jinja: set, loop, conditional (if/else), macros тощо

  • Оператор set створює змінну та надає їй значення.

    • Шаблон:
      {% set ... %}
      
    • Приклад:
      {% set country = 'Australia' %}
      
Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Jinja і dbt compile

Використання

  • У customers.sql, як написано:
{% set country = 'Australia' %}

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

Зібраний код

  • Вивід dbt compile -s customers.sql:


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

Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Jinja і dbt compile

  • Вивід термінала для однієї моделі
  • Вивід 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. Тека верхнього рівня — проєкт dbt looker ecommerce. Другий рівень — `target`, третій — `compiled`. У теці `compiled` — структура, що відтворює проєкт dbt, де зберігаються зібрані запити для моделей і тестів.

Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Давайте потренуємось!

Кейс-стаді: створення моделей даних для e-commerce за допомогою dbt

Preparing Video For Download...