Skip to content

Cum să scrii modele SQL în dbt

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să scrii modele SQL în dbt. We cover key concepts, practical examples, and best practices.

Vei învăța cum să scrii modele SQL în dbt, transformând date brute în tabele și view-uri optimizate pentru analiză, folosind sintaxa Jinja și SQL.

Problema

Scripturile SQL tradiționale sunt greu de întreținut, netestabile și dificil de documentat. dbt introduce modele SQL care sunt modulare, testabile și versionabile.

Modul Greșit

-- Script SQL tradițional — nume hardcodat, fără reutilizare
SELECT
    u.id,
    u.name,
    COUNT(o.id) as order_count
FROM raw_users u
LEFT JOIN raw_orders o ON u.id = o.user_id
GROUP BY u.id, u.name;
-- Dacă tabela se redenumește, trebuie actualizat manual peste tot

Modul Corect

-- models/order_summary.sql — model dbt
WITH user_orders AS (
    SELECT
        u.id,
        u.name,
        COUNT(o.id) AS order_count
    FROM {{ ref('stg_users') }} u
    LEFT JOIN {{ ref('stg_orders') }} o ON u.id = o.user_id
    GROUP BY u.id, u.name
)

SELECT * FROM user_orders
dbt run --model order_summary

Output:

17:23:45  Running with dbt=1.8.0
17:23:46  Found 5 models, 3 tests, 2 sources
17:23:48  1 of 1 START sql view model dbt_schema.order_summary
17:23:49  1 of 1 OK created sql view model dbt_schema.order_summary
17:23:49  Finished running 1 model in 0.32s

Pas cu Pas

1. Creează un fișier SQL în directorul models/

models/
  stg_users.sql
  stg_orders.sql
  order_summary.sql

2. Scrie modelul cu ref() pentru dependențe

-- models/stg_users.sql
SELECT
    id,
    name,
    email,
    created_at
FROM {{ source('raw', 'users') }}

3. Rulează modelul

dbt run --model stg_users
dbt run  # Rulează toate modelele

Sfaturi de Prevenție

  • Folosește {{ ref() }} în loc de nume de tabele hardcodate
  • Separă modelele în subdirectoare (staging/, marts/, intermediate/)
  • Rulează dbt compile înainte de dbt run pentru a verifica sintaxa
  • Testează fiecare model cu dbt test

Greșeli Comune

  1. Hardcodarea numelor de tabele — în loc de {{ ref('model') }}, folosești raw.users direct
  2. Nume de model incorecte în ref() — dacă modelul nu există, compilarea eșuează
  3. Fără alias-uri în JOIN — coloane ambigue cauzează erori SQL
  4. CTE-uri fără sens — prea multe CTE-uri care complică citirea

Întrebări Frecvente

### Care e diferența între `ref()` și `source()`?

ref() referențiază alte modele dbt. source() referențiază tabele brute din baza de date, definite în fișiere YAML de surse.

Pot folosi subquery-uri în loc de CTE-uri?

Da, dar CTE-urile sunt preferate în dbt pentru lizibilitate și pentru că fiecare CTE poate fi testat separat.

Cum definesc ordinea de execuție a modelelor?

dbt determină automat ordinea pe baza dependențelor ref(). Nu trebuie să specifici manual ordinea.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru transformări de date sigure.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro