Tester le SQL : tests dbt et Great Expectations
Écrivez des tests de qualité des données avec dbt (unique, not_null, accepted_values) et des assertions plus riches avec Great Expectations.
Tester le SQL : tests dbt et Great Expectations est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Pourquoi tester SQL ?
Les mauvaises données restent invisibles jusqu'à ce qu'elles provoquent une mauvaise décision. Les tests détectent :
- la dérive du schéma (colonne supprimée, type modifié)
- la qualité des données (
NULLlà où elles sont interdites, doublons, valeurs hors limites) - les problèmes de références (lignes orphelines)
- les invariants métier (revenus ≥ 0, totaux corrects)
Tests dbt intégrés
Déclarez-les pour chaque colonne dans YAML :
# models/orders.yml
version: 2
models:
- name: orders
columns:
- name: id
tests:
- unique
- not_null
- name: user_id
tests:
- not_null
- relationships:
to: ref('users')
field: id
- name: status
tests:
- accepted_values:
values: ['pending', 'paid', 'cancelled']Exécuter les tests dbt
Exécutez tous les tests :
dbt test
dbt test --select orders
dbt build # = run + testTests singuliers personnalisés
Un test est simplement un SELECT qui renvoie des lignes en cas d'échec :
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0Tests génériques
Tests paramétrés réutilisables sur de nombreuses colonnes :
-- tests/generic/test_in_range.sql
{% test in_range(model, column_name, min, max) %}
SELECT * FROM {{ model }}
WHERE {{ column_name }} < {{ min }} OR {{ column_name }} > {{ max }}
{% endtest %}
-- Use it in YAML:
columns:
- name: age
tests:
- in_range:
min: 0
max: 120Paquet dbt-utils
Ajoute d'autres tests : combinaisons uniques, expression_is_true, equal_rowcount, etc. :
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
Alternative plus complète — un cadre Python doté d'une vaste bibliothèque d'attentes et de rapports détaillés :
import great_expectations as ge
suite = context.add_or_update_expectation_suite('orders')
batch = context.get_validator(batch_request, expectation_suite_name='orders')
batch.expect_column_values_to_not_be_null('id')
batch.expect_column_values_to_be_between('total', 0, 10000)
results = context.run_checkpoint('orders_checkpoint')Quand utiliser chaque outil
- tests dbt — premier choix si vous utilisez déjà dbt ; léger et limité à SQL
- Great Expectations — si vous avez besoin de rapports détaillés, d'assertions plus variées et de formats autres que SQL (CSV/parquet)
Gravité des tests
dbt 1.0+ prend en charge les niveaux de gravité avertissement et erreur :
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"Intégration à la CI
Exécutez les tests dans chaque PR — bloquez la fusion en cas d'échec :
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"Tableaux de bord de qualité des données
dbt-utils + dbt-expectations + Elementary peuvent transformer les résultats des tests en tableau de bord Grafana / Looker.
Tests de schéma contre tests de lignes
Détectez les régressions du schéma grâce à l'« instantané » des types de colonnes de dbt ; les tests de lignes détectent les bogues dans les données.
Récapitulatif
Les tests transforment SQL de « faites-moi confiance » en « vérifié ».
- les tests dbt pour une approche déclarative dans l'entrepôt de données
- Great Expectations pour une couverture plus large et plus riche
- exécutez-les dans la CI ; bloquez en cas d'échec
- suivez les résultats au fil du temps
Vérification rapide
Vous voulez un test dbt qui échoue si une ligne contient total < 0. Quelle est l'approche la plus simple ?
Questions Fréquemment Posées
La leçon « Tester le SQL : tests dbt et Great Expectations » est-elle gratuite ?
Oui — le texte complet de « Tester le SQL : tests dbt et Great Expectations » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Tester le SQL : tests dbt et Great Expectations » ?
Écrivez des tests de qualité des données avec dbt (unique, not_null, accepted_values) et des assertions plus riches avec Great Expectations. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Tester le SQL : tests dbt et Great Expectations » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Fondamentaux de DBT (Data Build Tool)
- SQLFluff et analyse de style
- Tester le SQL : tests dbt et Great Expectations
- CI pour les modifications de schéma (GitHub Actions)