Apresentando Jinja com dbt

Estudo de caso: criando modelos de dados de e-commerce com dbt

Susan Sun

Freelance Data Scientist

dbt usa três linguagens

O dbt usa três linguagens:

  • SQL para transformações
  • YAML para documentação e testes
  • Jinja para templates
  • Exemplo de SQL:

    SELECT * FROM ...
    
  • Exemplo de YAML:

    - name: customers
      description: A data mart
    
  • Exemplo de Jinja:

    FROM {{ ref('stg_looker__users') }}
    
Estudo de caso: criando modelos de dados de e-commerce com dbt

O que é Jinja no dbt

O que é Jinja no dbt?

  • Uma linguagem de template Pythonic
  • Usada para gerar SQL dinâmico
  • Presente em models, macros, testes etc. do dbt

Por que é útil?

  • Melhor colaboração
  • Menos repetição (DRY), mais código reutilizável

Exemplos de Jinja no dbt:

  • Referenciar models do dbt

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • Criar loops

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
Estudo de caso: criando modelos de dados de e-commerce com dbt

Tipos de Jinja no dbt

  1. Declarações Jinja ficam entre {%...%}
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Expressões Jinja ficam entre {{...}}
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Comentários Jinja ficam entre {# #}
     {# This is a comment #}
    
Estudo de caso: criando modelos de dados de e-commerce com dbt

Declarações Jinja: set

  • Tipos de declarações Jinja: set, loop, condicional (if/else), macros etc.

  • Uma declaração set cria uma variável e atribui um valor.

    • Modelo:
      {% set ... %}
      
    • Exemplo:
      {% set country = 'Australia' %}
      
Estudo de caso: criando modelos de dados de e-commerce com dbt

Jinja e dbt compile

Uso

  • Dentro de customers.sql, como escrito:
{% set country = 'Australia' %}

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

Código compilado

  • Saída de dbt compile -s customers.sql:


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

Estudo de caso: criando modelos de dados de e-commerce com dbt

Jinja e dbt compile

  • Saída do terminal para um único model
  • Saída de 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'
)
...
  • Diretório /target/compiled gerado
  • dbt compile gerou arquivos compilados:

Captura de tela de diretórios gerados automaticamente pelo subcomando dbt compile. A pasta de nível superior é o projeto dbt looker ecommerce. O segundo nível é `target` e o terceiro é `compiled`. Dentro de `compiled` há diretórios que imitam a estrutura do projeto dbt, onde ficam as consultas compiladas de models e testes.

Estudo de caso: criando modelos de dados de e-commerce com dbt

Vamos praticar!

Estudo de caso: criando modelos de dados de e-commerce com dbt

Preparing Video For Download...