Cum să referențiezi alte modele în dbt cu funcția ref()
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 șiref()pentru modele - Testează dependențele cu
dbt run --selector:...
Greșeli Comune
- Nume greșit în
ref()— dacă modelul nu există, compilarea eșuează cuModel not found - Referință ciclică — modelul A referențiază B, B referențiază A — dbt blochează compilarea
- Hardcodarea schemei — nu adăuga
database.schema.tableînref(); lasă dbt să decidă - Omisiunea ghilimelelor —
ref(stg_users)în loc deref('stg_users')— eroare Jinja
Întrebări Frecvente
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