Introduktion till Jinja med dbt

Fallstudie: Bygg e-handelsdatamodeller med dbt

Susan Sun

Freelance Data Scientist

dbt använder tre språk

dbt använder tre språk:

  • SQL för transformationer
  • YAML för dokumentation och testning
  • Jinja för templating
  • Exempel på SQL:

    SELECT * FROM ...
    
  • Exempel på YAML:

    - name: customers
      description: A data mart
    
  • Exempel på Jinja:

    FROM {{ ref('stg_looker__users') }}
    
Fallstudie: Bygg e-handelsdatamodeller med dbt

Vad är dbt Jinja

Vad är dbt Jinja?

  • Ett Pythonbaserat mallspråk
  • Används för dynamisk SQL-generering
  • Finns i dbt-modeller, makron, tester m.m.

Varför är det användbart?

  • Bättre samarbete
  • Mindre upprepning (DRY), mer återanvändbar kod

Exempel på Jinja i dbt:

  • Referera till dbt-modeller

    SELECT *
    FROM {{ ref('stg_looker__users') }}
    
  • Skapa loopar

    {% for column in ['col1', 'col2'] %}
      SELECT {{ column }}
      FROM table_name
    {% endfor %}
    
Fallstudie: Bygg e-handelsdatamodeller med dbt

Typer av dbt Jinja

  1. Jinja-satser omges av {%...%}
     {% set order_statuses = ['Shipped', 'Complete', 'Processing'] %}
    
  2. Jinja-uttryck omges av {{...}}
     SELECT * FROM {{ ref('stg_looker__users') }}
    
  3. Jinja-kommentarer omges av {# #}
     {# This is a comment #}
    
Fallstudie: Bygg e-handelsdatamodeller med dbt

Jinja-satser: set

  • Typer av Jinja-satser: set, loop, villkorssats (if/else), makron m.m.

  • En set-sats i Jinja skapar en variabel och tilldelar den ett värde.

    • Mall:
      {% set ... %}
      
    • Exempel:
      {% set country = 'Australia' %}
      
Fallstudie: Bygg e-handelsdatamodeller med dbt

Jinja och dbt compile

Användning

  • I customers.sql, somskriven:
{% set country = 'Australia' %}

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

Kompilerad kod

  • Utdata från dbt compile -s customers.sql:


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

Fallstudie: Bygg e-handelsdatamodeller med dbt

Jinja och dbt compile

  • Terminalutdata för en enskild modell
  • Utdata från 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'
)
...
  • Genererad /target/compiled-katalog
  • Kompilerade filer genererade av dbt compile:

Skärmdump av en serie filkataloger som automatiskt genererats av dbt compile-underkommandot. Toppnivåmappen är looker ecommerce dbt-projektet. Andra nivån heter `target` och tredje nivån är `compiled`. Under `compiled`-katalogen finns en serie kataloger som speglar dbt-projektstrukturen, där kompilerade frågor för modeller och tester lagras.

Fallstudie: Bygg e-handelsdatamodeller med dbt

Nu kör vi en övning!

Fallstudie: Bygg e-handelsdatamodeller med dbt

Preparing Video For Download...