0Pricing
SQL Academy · Lekcja

Testowanie SQL: testy dbt, Great Expectations

Pisać testy jakości danych za pomocą dbt (unique, not_null, accepted_values) oraz bardziej rozbudowane asercje z Great Expectations

Testowanie SQL: testy dbt, Great Expectations to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Dlaczego testować SQL?

Błędne dane pozostają niewidoczne, dopóki nie doprowadzą do błędnej decyzji. Testy wykrywają:

  • Rozbieżności schematu (usuniętą kolumnę, zmieniony typ)
  • Problemy z jakością danych (NULL-e tam, gdzie są niedozwolone, duplikaty, wartości poza zakresem)
  • Problemy z integralnością referencyjną (osierocone wiersze)
  • Niezmienniki biznesowe (przychód ≥ 0, sumy się zgadzają)

Wbudowane testy dbt

Deklaruje się je dla każdej kolumny w 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']

Uruchamianie testów dbt

Uruchomienie wszystkich testów:

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

Niestandardowe testy singularne

Test to po prostu instrukcja SELECT, która w przypadku niepowodzenia zwraca wiersze:

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

Testy generyczne

Sparametryzowane testy do ponownego wykorzystania w wielu kolumnach:

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

Pakiet dbt-utils

Dodaje więcej testów: unikalne kombinacje, expression_is_true, equal_rowcount itd.:

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

Great Expectations

Bardziej rozbudowana alternatywa — framework Pythona z obszerną biblioteką asercji i bogatymi raportami:

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

Kiedy używać poszczególnych narzędzi

  • testy dbt — pierwszy wybór, gdy już używają Państwo dbt; lekkie rozwiązanie działające wyłącznie z SQL
  • Great Expectations — gdy potrzebne są bogate raporty, szerszy zakres asercji oraz formaty inne niż SQL (CSV/parquet)

Poziom ważności testu

dbt 1.0+ obsługuje poziomy ważności warn i error:

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

Integracja z CI

Uruchamiaj testy przy każdym PR — w przypadku niepowodzenia blokuj scalanie:

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

Pulpity jakości danych

dbt-utils + dbt-expectations + Elementary mogą przekształcić wyniki testów w pulpit Grafana / Looker.

Testy schematu a testy wierszy

Regresje schematu można wykrywać za pomocą „migawki” typów kolumn w dbt, a testy wierszy wykrywają błędy danych.

Podsumowanie

Testowanie zmienia SQL z „zaufaj mi” w „zweryfikowano”.

  • Testy dbt do deklaratywnego wykonywania w hurtowni
  • Great Expectations do szerszych i bogatszych testów
  • Uruchamianie w CI; blokowanie w przypadku niepowodzenia
  • Śledzenie wyników w czasie

Szybki test

Chcą Państwo utworzyć test dbt, który zakończy się niepowodzeniem, jeśli dowolny wiersz będzie zawierał total < 0. Jakie jest najprostsze rozwiązanie?

Często zadawane pytania

Czy lekcja „Testowanie SQL: testy dbt, Great Expectations” jest bezpłatna?

Tak — pełny tekst „Testowanie SQL: testy dbt, Great Expectations” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Testowanie SQL: testy dbt, Great Expectations”?

Pisać testy jakości danych za pomocą dbt (unique, not_null, accepted_values) oraz bardziej rozbudowane asercje z Great Expectations Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Testowanie SQL: testy dbt, Great Expectations”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy DBT (Data Build Tool)
  2. SQLFluff i lintowanie
  3. Testowanie SQL: testy dbt, Great Expectations
  4. CI dla zmian schematu (GitHub Actions)
← Powrót do SQL Academy