SQL testen: dbt-tests, Great Expectations
Schrijf datakwaliteitstests met dbt (unique, not_null, accepted_values) en uitgebreidere assertions met Great Expectations.
SQL testen: dbt-tests, Great Expectations is een gratis SQL Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Waarom SQL testen?
Slechte gegevens blijven onzichtbaar totdat ze tot een verkeerde beslissing leiden. Tests vinden:
- Verschuivingen in het schema (kolom verwijderd, type gewijzigd)
- Gegevenskwaliteit (NULL-waarden waar die niet zijn toegestaan, duplicaten, waarden buiten het bereik)
- Problemen met verwijzingen (weesrijen)
- Bedrijfsinvarianten (omzet ≥ 0, totalen kloppen)
dbt-tests: ingebouwd
Declareer ze per kolom in 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']dbt-tests uitvoeren
Voer alle tests uit:
dbt test
dbt test --select orders
dbt build # = run + testAangepaste enkelvoudige tests
Een test is gewoon een SELECT die bij een fout rijen retourneert:
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0Generieke tests
Tests met parameters die u opnieuw kunt gebruiken voor veel kolommen:
-- 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: 120Pakket dbt-utils
Voegt meer tests toe: unieke combinaties, expression_is_true, equal_rowcount enzovoort:
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
Een uitgebreider alternatief: een Python-framework met een uitgebreide bibliotheek met verwachtingen en uitgebreide rapporten:
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')Wanneer gebruikt u welke?
- dbt-tests — eerste keuze als u dbt al gebruikt; lichtgewicht en alleen SQL
- Great Expectations — wanneer u uitgebreide rapporten, bredere controles of indelingen buiten SQL nodig hebt (CSV/parquet)
Testernst
dbt 1.0+ ondersteunt de ernstniveaus waarschuwing en fout:
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"Integratie met CI
Voer tests uit bij elke PR en blokkeer het samenvoegen bij een fout:
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"Dashboards voor gegevenskwaliteit
dbt-utils + dbt-expectations + Elementary kunnen testresultaten omzetten in een Grafana- of Looker-dashboard.
Schematiseringstests versus rijtests
Vang regressies in het schema op met dbt's "snapshot" van kolomtypen; rijtests vinden fouten in gegevens.
Samenvatting
Door te testen verandert SQL van "vertrouw me" in "geverifieerd".
- dbt-tests voor declaratieve controles in het datawarehouse
- Great Expectations voor bredere en uitgebreidere controles
- Voer ze uit in CI en blokkeer bij een fout
- Houd resultaten in de loop van de tijd bij
Korte controle
U wilt een dbt-test die faalt als een rij total < 0 bevat. Wat is de eenvoudigste aanpak?
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “SQL testen: dbt-tests, Great Expectations” gratis?
Ja — de volledige tekst van “SQL testen: dbt-tests, Great Expectations” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “SQL testen: dbt-tests, Great Expectations”?
Schrijf datakwaliteitstests met dbt (unique, not_null, accepted_values) en uitgebreidere assertions met Great Expectations. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “SQL testen: dbt-tests, Great Expectations”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Basis van DBT (Data Build Tool)
- SQLFluff en linting
- SQL testen: dbt-tests, Great Expectations
- CI voor schemamutaties (GitHub Actions)