SQL Academy · Lektion

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.

Lektion 3 av 414 steg

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 + test

Anpassade 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 < 0

Generiska 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: 120

Paketet 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?

Gratis att börja

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

  1. Grunderna i DBT (Data Build Tool)
  2. SQLFluff och lintning
  3. Testning av SQL: dbt-tester och Great Expectations
  4. CI för schemaändringar (GitHub Actions)
← Tillbaka till SQL Academy