SQL Academy · Oppitunti

SQL:n testaaminen: dbt-testit ja Great Expectations

Kirjoita tietojen laatua testaavia dbt-testejä (unique, not_null, accepted_values) ja monipuolisempia tarkistuksia Great Expectationsilla.

Oppitunti 3/414 vaihetta

SQL:n testaaminen: dbt-testit ja Great Expectations on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Miksi SQL:ää testataan?

Virheelliset tiedot jäävät näkymättömiksi, kunnes ne johtavat virheelliseen päätökseen. Testit löytävät seuraavat ongelmat:

  • Skeeman muuttuminen (sarake poistettu tai tyyppi muuttunut)
  • Tietojen laatu (NULL-arvoja kohdissa, joissa niitä ei sallita, kaksoiskappaleita tai sallitun alueen ulkopuolisia arvoja)
  • Viite-eheyden ongelmat (orporivit)
  • Liiketoiminnan invariantit (revenue ≥ 0, summat täsmäävät)

dbt-testit: sisäänrakennetut

Ilmoittakaa sarakekohtaisesti YAMLissa:

# 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-testien suorittaminen

Suorittakaa kaikki testit:

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

Mukautetut yksittäiset testit

Testi on yksinkertaisesti SELECT-kysely, joka palauttaa rivejä testin epäonnistuessa:

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

Yleiset testit

Parametrisoituja testejä, joita voidaan käyttää uudelleen monissa sarakkeissa:

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

Lisää testejä, kuten yhdistelmien yksikäsitteisyyden, expression_is_true- ja equal_rowcount-testit:

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

Great Expectations

Raskaampi vaihtoehto — Python-kehys, jossa on laaja odotuskirjasto ja monipuoliset raportit:

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

Milloin mitäkin käytetään

  • dbt-testit — ensisijainen valinta, kun käytätte jo dbt:tä; kevyt ja perustuu pelkkään SQL:ään
  • Great Expectations — kun tarvitsette monipuolisia raportteja, laajempia väitteitä tai muita kuin SQL-muotoja (CSV/parquet)

Testien vakavuus

dbt 1.0+ tukee warn- ja error-vakavuustasoja:

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

Integrointi CI:hin

Suorittakaa testit jokaisessa PR:ssä ja estäkää yhdistäminen testin epäonnistuessa:

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

Tietojen laadun koontinäytöt

dbt-utils, dbt-expectations ja Elementary voivat muuntaa testitulokset Grafana- tai Looker-koontinäytöksi.

Skeematestit vai rivitestit

Havaitkaa skeeman regressiot dbt:n saraketyyppien "snapshotilla"; rivitestit löytävät tiedoissa olevat virheet.

Kertaus

Testaus muuttaa SQL:n asenteesta "luottakaa minuun" muotoon "varmistettu".

  • dbt-testit deklaratiiviseen testaukseen tietovarastossa
  • Great Expectations laajempaan ja monipuolisempaan testaukseen
  • Suorittakaa testit CI:ssä ja estäkää eteneminen epäonnistumisen yhteydessä
  • Seuratkaa tuloksia ajan mittaan

Pikatarkistus

Haluatte dbt-testin, joka epäonnistuu, jos millä tahansa rivillä on total < 0. Mikä on yksinkertaisin tapa toteuttaa se?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”SQL:n testaaminen: dbt-testit ja Great Expectations” ilmainen?

Kyllä – oppitunnin ”SQL:n testaaminen: dbt-testit ja Great Expectations” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”SQL:n testaaminen: dbt-testit ja Great Expectations”?

Kirjoita tietojen laatua testaavia dbt-testejä (unique, not_null, accepted_values) ja monipuolisempia tarkistuksia Great Expectationsilla. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”SQL:n testaaminen: dbt-testit ja Great Expectations”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. DBT:n (Data Build Tool) perusteet
  2. SQLFluff ja linttaus
  3. SQL:n testaaminen: dbt-testit ja Great Expectations
  4. Skeemamuutosten CI (GitHub Actions)
← Takaisin: SQL Academy