0Pricing
SQL Academy · Lektion

SQL testen: dbt-Tests, Great Expectations

Schreiben Sie Tests zur Datenqualität mit dbt (unique, not_null, accepted_values) und umfassendere Assertions mit Great Expectations.

SQL testen: dbt-Tests, Great Expectations ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum SQL testen?

Fehlerhafte Daten bleiben unsichtbar, bis sie zu einer falschen Entscheidung führen. Tests finden:

  • Schema-Drift (Spalte entfernt, Typ geändert)
  • Datenqualität (NULL-Werte, wo sie verboten sind, Duplikate, Werte außerhalb des gültigen Bereichs)
  • Referenzielle Probleme (verwaiste Zeilen)
  • Geschäftliche Invarianten (Umsatz ≥ 0, Summen gehen auf)

dbt-Tests: Integriert

Pro Spalte in YAML deklarieren:

# 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-Tests ausführen

Alle Tests ausführen:

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

Benutzerdefinierte Singular-Tests

Ein Test ist einfach ein SELECT, das im Fehlerfall Zeilen zurückgibt:

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

Generische Tests

Parametrisierte Tests zur Wiederverwendung für viele Spalten:

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

Fügt weitere Tests hinzu: eindeutige Kombinationen, expression_is_true, equal_rowcount usw.:

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

Great Expectations

Umfangreichere Alternative – ein Python-Framework mit einer großen Bibliothek von Erwartungen und ausführlichen Berichten:

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

Wann welches Tool verwenden?

  • dbt-Tests – erste Wahl, wenn Sie bereits dbt verwenden; leichtgewichtig und ausschließlich SQL
  • Great Expectations – wenn Sie ausführliche Berichte, umfassendere Prüfungen oder Formate außerhalb von SQL benötigen (CSV/Parquet)

Test-Schweregrad

dbt 1.0+ unterstützt die Schweregrade warn und error:

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

CI-Integration

Tests in jedem PR ausführen – bei Fehlern das Mergen verhindern:

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

Dashboards zur Datenqualität

dbt-utils + dbt-expectations + Elementary können Testergebnisse in ein Grafana- oder Looker-Dashboard übertragen.

Schema-Tests vs. Zeilen-Tests

Schema-Regressionen erkennen Sie mit dem „snapshot“ der Spaltentypen von dbt; Zeilen-Tests finden Datenfehler.

Zusammenfassung

Tests machen aus SQL ein „Vertrau mir“ ein „Verifiziert“.

  • dbt-Tests für deklarative Prüfungen im Data Warehouse
  • Great Expectations für umfassendere und ausführlichere Prüfungen
  • In CI ausführen und bei Fehlern blockieren
  • Ergebnisse über die Zeit verfolgen

Schnelltest

Sie möchten einen dbt-Test, der fehlschlägt, wenn eine Zeile total < 0 enthält. Was ist der einfachste Ansatz?

Häufig gestellte Fragen

Ist die Lektion „SQL testen: dbt-Tests, Great Expectations“ kostenlos?

Ja — der vollständige Text von „SQL testen: dbt-Tests, Great Expectations“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „SQL testen: dbt-Tests, Great Expectations“?

Schreiben Sie Tests zur Datenqualität mit dbt (unique, not_null, accepted_values) und umfassendere Assertions mit Great Expectations. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „SQL testen: dbt-Tests, Great Expectations“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von DBT (Data Build Tool)
  2. SQLFluff und Linting
  3. SQL testen: dbt-Tests, Great Expectations
  4. CI für Schemaänderungen (GitHub Actions)
← Zurück zu SQL Academy