Testning av SQL: dbt-tester och Great Expectations
Skriv tester av datakvalitet med dbt (unique, not_null, accepted_values) och mer omfattande assertioner med Great Expectations.
Testning av SQL: dbt-tester och Great Expectations är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.
Varför testa SQL?
Felaktiga data förblir osynliga tills de leder till ett felaktigt beslut. Tester fångar:
- Schemaförändringar (kolumn borttagen, typ ändrad)
- Datakvalitet (NULL-värden där de inte är tillåtna, dubbletter, värden utanför intervallet)
- Referensproblem (föräldralösa rader)
- Affärsinvarianter (revenue ≥ 0, totalsummor stämmer)
Inbyggda dbt-tester
Ange dem per kolumn i 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']Köra dbt-tester
Kör alla tester:
dbt test
dbt test --select orders
dbt build # = run + testAnpassade singular-tester
Ett test är helt enkelt en SELECT-fråga som returnerar rader när den misslyckas:
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0Generiska tester
Parametriserade tester som kan återanvändas för många kolumner:
-- 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: 120Paketet dbt-utils
Lägger till fler tester: unika kombinationer, expression_is_true, equal_rowcount med mera:
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
Ett tyngre alternativ – ett Python-ramverk med ett omfattande bibliotek av förväntningar och utförliga rapporter:
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')När används respektive verktyg?
- dbt-tester — förstahandsval när ni redan använder dbt; lättviktiga och endast SQL
- Great Expectations — när ni behöver utförliga rapporter, bredare påståenden och format utanför SQL (CSV/parquet)
Testernas allvarlighetsgrad
dbt 1.0+ stöder allvarlighetsgraderna warn och error:
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"CI-integration
Kör tester i varje PR och blockera merge vid fel:
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"Instrumentpaneler för datakvalitet
dbt-utils + dbt-expectations + Elementary kan omvandla testresultat till en Grafana- eller Looker-instrumentpanel.
Schematester kontra radtester
Fånga schemaregressioner med dbt:s "snapshot" av kolumntyper; radtester fångar databuggar.
Sammanfattning
Testning förvandlar SQL från "lita på mig" till "verifierad".
- dbt-tester för deklarativ testning i datalagret
- Great Expectations för bredare och utförligare tester
- Kör i CI och blockera vid fel
- Följ resultaten över tid
Snabbkontroll
Ni vill ha ett dbt-test som misslyckas om någon rad har total < 0. Vilken är den enklaste lösningen?
Lär dig SQL med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 46
- Lektioner
- 183
Vanliga frågor
Är lektionen ”Testning av SQL: dbt-tester och Great Expectations” gratis?
Ja – hela texten till ”Testning av SQL: dbt-tester och Great Expectations” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Testning av SQL: dbt-tester och Great Expectations”?
Skriv tester av datakvalitet med dbt (unique, not_null, accepted_values) och mer omfattande assertioner med Great Expectations. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig SQL Academy?
Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Testning av SQL: dbt-tester och Great Expectations”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här SQL Academy-lektionen?
Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Grunderna i DBT (Data Build Tool)
- SQLFluff och lintning
- Testning av SQL: dbt-tester och Great Expectations
- CI för schemaändringar (GitHub Actions)