SQL Academy · leksjon

Testing av SQL: dbt-tester og Great Expectations

Skriv tester for datakvalitet med dbt (unique, not_null, accepted_values), og bruk rikere påstander med Great Expectations.

Leksjon 3 av 414 trinn

Testing av SQL: dbt-tester og Great Expectations er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hvorfor teste SQL?

Dårlige data er usynlige helt til de fører til en dårlig beslutning. Tester oppdager:

  • Skjemadivergens (kolonne fjernet, type endret)
  • Datakvalitetsproblemer (NULL-verdier der de ikke er tillatt, duplikater, verdier utenfor gyldig område)
  • Referanseproblemer (foreldreløse rader)
  • Forretningsinvarianter (inntekt ≥ 0, summer stemmer)

dbt-tester: innebygde

Deklarer tester per kolonne 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']

Kjøre dbt-tester

Kjør alle tester:

dbt test
dbt test --select orders
dbt build  # = run + test

Egendefinerte enkeltstående tester

En test er ganske enkelt en SELECT som returnerer rader når den feiler:

-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0

Generiske tester

Parametriserte tester som kan gjenbrukes på tvers av mange kolonner:

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

dbt-utils-pakken

Legger til flere tester: unike kombinasjoner, expression_is_true, equal_rowcount osv.:

- dbt_utils.expression_is_true:
    expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
    compare_model: ref('staging_orders')

Great Expectations

Et mer omfattende alternativ – et Python-rammeverk med et stort bibliotek av forventninger og detaljerte 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 bør de ulike brukes?

  • dbt-tester – førstevalg når du allerede bruker dbt; lettvektsløsning, bare SQL
  • Great Expectations – når du trenger detaljerte rapporter, bredere påstander eller formater utover SQL (CSV/parquet)

Testalvorlighet

dbt 1.0+ støtter alvorlighetsgradene warn og error:

- accepted_values:
    values: [...]
    config:
      severity: warn
      warn_if: ">100"
      error_if: ">1000"

CI-integrasjon

Kjør tester i hver PR – blokker sammenslåing ved feil:

# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
  run: echo "::error::dbt tests failed"

Dashbord for datakvalitet

dbt-utils + dbt-expectations + Elementary kan gjøre testresultater om til et Grafana- eller Looker-dashbord.

Skjematester kontra radtester

Oppdag skjemaregresjoner med dbts «snapshot» av kolonnetyper; radtester oppdager datafeil.

Oppsummering

Testing gjør at SQL går fra «stol på meg» til «verifisert».

  • dbt-tester for deklarativ testing i datavarehuset
  • Great Expectations for bredere og mer detaljerte tester
  • Kjør i CI og blokker ved feil
  • Følg resultatene over tid

Kort kontroll

Du vil ha en dbt-test som feiler hvis en rad har total < 0. Hva er den enkleste fremgangsmåten?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «Testing av SQL: dbt-tester og Great Expectations» gratis?

Ja – hele teksten i «Testing av SQL: dbt-tester og Great Expectations» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Testing av SQL: dbt-tester og Great Expectations»?

Skriv tester for datakvalitet med dbt (unique, not_null, accepted_values), og bruk rikere påstander med Great Expectations. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Testing av SQL: dbt-tester og Great Expectations»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Grunnleggende om DBT (Data Build Tool)
  2. SQLFluff og linting
  3. Testing av SQL: dbt-tester og Great Expectations
  4. CI for skjem endringer (GitHub Actions)
← Tilbake til SQL Academy