Cum să creezi teste singular în dbt
In this tutorial, you'll learn about Cum să creezi teste singular în dbt. We cover key concepts, practical examples, and best practices.
Vei învăța cum să creezi teste singular în dbt — teste SQL personalizate care verifică reguli de business unice, stocate în directorul tests/.
Problema
Testele generice (not_null, unique) acoperă cazuri standard. Pentru reguli de business specifice — "niciun utilizator nu poate avea comenzi active în timpul nopții" — ai nevoie de teste personalizate. Testele singular răspund acestei nevoi.
Modul Greșit
-- Verificare manuală — nerepetabilă, uitată
SELECT * FROM orders
WHERE status = 'shipped' AND shipped_at IS NULL;
-- Rulezi când îți aduci aminte, dar nu e în pipeline
Modul Corect
-- tests/assert_shipped_orders_have_date.sql — test singular
-- Testul eșuează (returnează rânduri) când există comenzi
-- marcate ca 'shipped' fără dată de livrare
SELECT
order_id,
status,
shipped_at
FROM {{ ref('stg_orders') }}
WHERE status = 'shipped'
AND shipped_at IS NULL
dbt test --select test_type:singular
Output:
17:23:45 1 of 1 PASS assert_shipped_orders_have_date
17:23:45 Finished running 1 test
Când testul eșuează:
17:23:45 1 of 1 FAIL assert_shipped_orders_have_date
17:23:45 Got 3 results, expected 0
Pas cu Pas
1. Creează fișierul SQL în tests/
-- tests/assert_positive_order_total.sql
SELECT
order_id,
total
FROM {{ ref('stg_orders') }}
WHERE total < 0
2. Scrie testul ca SELECT care returnează eșecuri
Regula de aur: testul PASS când returnează 0 rânduri, FAIL când returnează rânduri.
-- tests/assert_no_future_dates.sql
SELECT *
FROM {{ ref('stg_orders') }}
WHERE order_date > CURRENT_DATE
3. Rulează testul
dbt test --select assert_no_future_dates
dbt test # Rulează toate testele (generice + singular)
Sfaturi de Prevenție
- Plasează testele singular în directorul
tests/, numodels/ - Denumește testele sugestiv:
assert_no_negative_prices.sql - Un test ar trebui să verifice o singură regulă de business
- Rulează testele singular separat de cele generice pentru debugging
Greșeli Comune
- Test care nu returnează rânduri — testul trece mereu, indiferent de date
- Test prea complex — verifică prea multe reguli deodată; separă în teste multiple
- SELECT * vs coloane specifice —
SELECT *e greu de citit când testul eșuează - Test fără
ref()— nume de tabelă hardcodat care se poate schimba
Întrebări Frecvente
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru teste singular robuste.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro