Введение в Jinja с dbt

Практический пример: построение моделей данных для электронной коммерции с помощью 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') }}
    
Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Что такое dbt Jinja

Что такое dbt Jinja?

  • Язык шаблонизации в стиле Python
  • Используется для динамической генерации SQL
  • Применяется в моделях, макросах, тестах dbt и т. д.

Зачем он нужен?

  • Улучшает совместную работу
  • Меньше повторений (DRY), больше переиспользуемого кода

Примеры Jinja в dbt:

  • Ссылка на модели dbt

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • Создание циклов

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Типы конструкций dbt Jinja

  1. Инструкции Jinja заключаются в {%...%}
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Выражения Jinja заключаются в {{...}}
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Комментарии Jinja заключаются в {# #}
     {# This is a comment #}
    
Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Инструкции Jinja: set

  • Типы инструкций Jinja: set, loop, conditional (if/else), macros и др.

  • Инструкция set создаёт переменную и присваивает ей значение.

    • Шаблон:
      {% set ... %}
      
    • Пример:
      {% set country = 'Australia' %}
      
Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Jinja и dbt compile

Использование

  • Содержимое файла customers.sql:
{% set country = 'Australia' %}

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

Скомпилированный код

  • Вывод команды dbt compile -s customers.sql:


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

Практический пример: построение моделей данных для электронной коммерции с помощью 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-проекта, где хранятся скомпилированные запросы для моделей и тестов.

Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Давайте потренируемся!

Практический пример: построение моделей данных для электронной коммерции с помощью dbt

Preparing Video For Download...