Skip to content

Cum să referențiezi alte modele în dbt cu funcția ref()

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să referențiezi alte modele în dbt cu funcția ref(). We cover key concepts, practical examples, and best practices.

Vei învăța cum să folosești funcția ref() în dbt pentru a referenția alte modele, permițând lui dbt să construiască automat graful de dependențe și să execute modelele în ordinea corectă.

Problema

În SQL tradițional, numele tabelelor sunt hardcodate. Când un tabel se redenumește sau se mută, trebuie actualizat manual în fiecare query. dbt rezolvă această problemă cu ref().

Modul Greșit

-- models/order_summary.sql — tabel hardcodat
SELECT
    u.name,
    COUNT(o.id) as order_count
FROM raw_data.users u
JOIN raw_data.orders o ON u.id = o.user_id
GROUP BY u.name;
-- Dacă raw_data.users devine stg_users, query-ul se strică

Modul Corect

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

Output:

17:23:45  1 of 3 START sql view model stg_users
17:23:46  2 of 3 START sql view model stg_orders
17:23:47  3 of 3 START sql view model order_summary
17:23:48  3 of 3 OK created sql view model order_summary

dbt execută automat stg_users și stg_orders înaintea order_summary.

Pas cu Pas

1. Identifică modelele dependente

-- models/stg_users.sql
SELECT id, name, email FROM {{ source('raw', 'users') }}
-- models/stg_orders.sql
SELECT id, user_id, total, status FROM {{ source('raw', 'orders') }}

2. Referențiază modelele în noul model

-- models/user_metrics.sql
SELECT
    u.name,
    COUNT(o.id) AS total_orders,
    SUM(o.total) AS revenue
FROM {{ ref('stg_users') }} u
LEFT JOIN {{ ref('stg_orders') }} o ON u.id = o.user_id
GROUP BY u.name

3. Verifică DAG-ul

dbt ls --resource-type model
dbt graph

Sfaturi de Prevenție

  • Folosește ref() pentru toate referințele între modele, fără excepții
  • Verifică DAG-ul vizual cu dbt docs generate && dbt docs serve
  • Nu referenția tabele brute direct — folosește source() pentru date brute și ref() pentru modele
  • Testează dependențele cu dbt run --selector:...

Greșeli Comune

  1. Nume greșit în ref() — dacă modelul nu există, compilarea eșuează cu Model not found
  2. Referință ciclică — modelul A referențiază B, B referențiază A — dbt blochează compilarea
  3. Hardcodarea schemei — nu adăuga database.schema.table în ref(); lasă dbt să decidă
  4. Omisiunea ghilimelelorref(stg_users) în loc de ref('stg_users') — eroare Jinja

Întrebări Frecvente

### Cum vede dbt ordinea de execuție?

dbt parsează toate fișierele SQL, extrage apelurile ref() și construiește un DAG (Directed Acyclic Graph). Apoi execută modelele în ordinea topologică.

Pot referenția un model dintr-un alt proiect dbt?

Da — folosește ref('model_name', package='project_name') pentru cross-project ref.

Ce se întâmplă dacă șterg un model referențiat de altele?

dbt afișează o eroare de compilare: Model "x" depends on model "y" which was not found. Trebuie să actualizezi toate referințele.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru gestionarea dependențelor între modele.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro