Technique
Les invariants comme tests
Une règle qui doit tenir sur chaque ligne, ou entre un modèle et sa source, écrite comme « les lignes qui l'enfreignent ».
SELECT … WHERE total <> items - discounts + shipping est un test : il passe quand il ne renvoie aucune ligne (dbt exécute
ces requêtes comme tests singuliers). Entre les couches, comparez les comptes : une jointure qui ajoute seulement des
colonnes doit garder rows_in = rows_out, et COUNT(*) face à COUNT(DISTINCT clé) à chaque CTE montre où le grain a cassé.
-- 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 |
|---|---|---|
| Aucune ligne | ||