Tecnica
Invarianti come test
Una regola che deve valere su ogni riga, o tra un modello e la sua sorgente, scritta come "le righe che la violano".
SELECT … WHERE total <> items - discounts + shipping è un test: passa quando non restituisce alcuna riga (dbt esegue
queste query come singular test). Tra i layer, confronta i conteggi: una join che aggiunge solo colonne deve mantenere
rows_in = rows_out, e COUNT(*) rispetto a COUNT(DISTINCT key) in ogni CTE mostra dove si è rotta la granularità.
-- A payment never comes before its order: no row means the test passes. SELECT p.payment_id, p.paid_at, o.ordered_at FROM payments p JOIN orders o ON o.order_id = p.order_id WHERE p.paid_at < o.ordered_at;
| payment_id | paid_at | ordered_at |
|---|---|---|
| Nessuna riga | ||