0Pricing
SQL Academy · Lezione

Test dell’SQL: test dbt e Great Expectations

Scriva test di qualità dei dati con dbt (unique, not_null, accepted_values) e asserzioni più articolate con Great Expectations.

Test dell’SQL: test dbt e Great Expectations è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Perché testare SQL?

I dati errati restano invisibili finché non causano una decisione sbagliata. I test individuano:

  • Deriva dello schema (colonna eliminata, tipo modificato)
  • Qualità dei dati (NULL dove non consentiti, duplicati, valori fuori intervallo)
  • Problemi referenziali (righe orfane)
  • Invarianti di business (revenue ≥ 0, i totali corrispondono)

Test dbt integrati

Dichiari i test per ogni colonna in 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']

Esecuzione dei test dbt

Esegua tutti i test:

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

Test singolari personalizzati

Un test è semplicemente una SELECT che restituisce righe in caso di errore:

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

Test generici

Test parametrizzati, riutilizzabili su molte colonne:

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

Pacchetto dbt-utils

Aggiunge altri test: combinazioni univoche, expression_is_true, equal_rowcount e così via:

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

Great Expectations

Un'alternativa più articolata: un framework Python con un'ampia libreria di aspettative e report dettagliati:

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

Quando usare ciascuno

  • test dbt — prima scelta se si sta già utilizzando dbt; leggeri e basati solo su SQL
  • Great Expectations — quando servono report dettagliati, asserzioni più ampie o formati oltre SQL (CSV/parquet)

Gravità dei test

dbt 1.0+ supporta i livelli di gravità warn ed error:

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

Integrazione con CI

Esegua i test in ogni PR e blocchi il merge in caso di errore:

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

Dashboard della qualità dei dati

dbt-utils + dbt-expectations + Elementary possono trasformare i risultati dei test in una dashboard Grafana / Looker.

Test dello schema e test delle righe

Individui le regressioni dello schema con lo "snapshot" di dbt sui tipi delle colonne; i test delle righe individuano i bug nei dati.

Riepilogo

I test trasformano SQL da "fidatevi di me" a "verificato".

  • test dbt per controlli dichiarativi direttamente nel data warehouse
  • Great Expectations per controlli più ampi e dettagliati
  • Esegua i test in CI e blocchi il processo in caso di errore
  • Tracci i risultati nel tempo

Verifica rapida

Desidera un test dbt che fallisca se una riga qualsiasi contiene total < 0. Qual è l'approccio più semplice?

Domande Frequenti

La lezione «Test dell’SQL: test dbt e Great Expectations» è gratuita?

Sì — il testo completo di «Test dell’SQL: test dbt e Great Expectations» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Test dell’SQL: test dbt e Great Expectations»?

Scriva test di qualità dei dati con dbt (unique, not_null, accepted_values) e asserzioni più articolate con Great Expectations. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Test dell’SQL: test dbt e Great Expectations»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Fondamenti di DBT (Data Build Tool)
  2. SQLFluff e linting
  3. Test dell’SQL: test dbt e Great Expectations
  4. CI per le modifiche allo schema (GitHub Actions)
← Torna a SQL Academy