BLEIBT INFORMIERT

Meldet euch für unseren Newsletter an und erhaltet exklusive Updates zu Blog, IT-Trends und Neuigkeiten der ORDIX AG.

BLEIBEN SIE INFORMIERT

Melden Sie sich für unsere Newsletter an und erhalten Sie exklusive Updates zu IT-Trends und Neuigkeiten der ORIDX AG.

Moderne Datentransformation: von Stored Procedures...
RAG ohne externe Systeme mit Oracle 26ai
5 Minuten Lesezeit (952 Worte)

dbt – Qualitätssicherung im Datenumfeld: Teststrategien mit dem data build tool

Testen ist unerlässlich, um Vertrauen in die eigene Software zu schaffen und frühzeitig Probleme sowohl in der Datenqualität als auch in der Businesslogik zu erkennen. Was sich in der modernen Softwareentwicklung längst als Standard etabliert hat, ist im Umfeld von Data Warehouses und auch kleineren Datenanwendungen oft ein unbeliebtes Thema. Nicht zuletzt, weil gängige Datenwerkzeuge nur selten eigene Testfunktionalitäten bieten. dbt revolutioniert im Datenumfeld das Testen und bringt direkt mehrere Möglichkeiten out-of-the-box mit sich. In diesem Beitrag werfen wir einen Blick auf verschiedene Teststrategien. Wenn dbt für euch neu ist, werft zunächst einen Blick in den vorangegangenen Artikel

Warum überhaupt testen?

Daten gelten oft als Grundlage für kritische Entscheidungen. Im Versicherungs- und Bankenumfeld gibt es beispielsweise mit DORA (Digital Operational Resilience Act) regulatorische Anforderungen und Vorgaben, die regelmäßige Tests sowie deren Nachweis erfordern. Aber auch in anderen Bereichen ist eine saubere Datengrundlage unerlässlich. dbt ermöglicht es uns, Tests direkt in den Entwicklungsprozess zu integrieren, statt sie als nachträgliche Aufgabe zu betrachten. 

Die drei Teststrategien in dbt

dbt bietet im Wesentlichen drei verschiedene Testarten, die miteinander kombiniert werden können:

1. Generic Tests

Gelten als Standardtests und werden deklarativ für ein Datenbankobjekt in einer YAML-Datei definiert und sind wiederverwendbar.. Von Haus aus stehen hier unique-, not_null-, accepted_values- und relationships-Tests zur Verfügung.

2. Singular Tests

Kommen insbesondere für individuelle Businesslogik zum Einsatz. Einfache Spaltentransformierungen, aber auch komplexe Logiken können hiermit geprüft werden. Die Tests werden als SQL-Abfrage abgelegt. Wenn die Abfrage einen Datensatz zurückgibt, gilt der Test als fehlgeschlagen.

3. Unit Tests

Ab dbt 1.8 (Mai 2024) werden auch Unit Tests unterstützt. Diese erlauben es, Mock-Daten zu definieren. Die Transformationen werden anschließend mit diesen Daten ausgeführt und das Ergebnis mit dem erwarteten Output verglichen.

Fallbeispiele – Deep Dive in die Teststrategien

Deep Dive Generic Tests

Anhand des dbt-Standardbeispiels jaffle-shop zeigen wir die Teststrategien im Einsatz. Abbildung 1 zeigt das Model stg_order.sql und Abbildung 2 die zugehörige Konfiguration in stg_order.yml. Durch ein paar Zeilen Konfiguration werden hier drei verschiedene Tests erstellt:

  1. Unique Test auf Spalte order_id
  2. Not Null Tests auf Spalte order_id
  3. Accepted Values Tests für die Spalte status
Abbildung 1: Generic Test für das stg_order.sql-Modell | Datei: models/staging/stg_order.sql
Abbildung 2: Generic Test für das stg_order.sql-Modell | Datei: models/staging/stg_order.yml

Neben den vordefinierten Tests bietet dbt auch die Möglichkeit, eigene Generic Tests zu schreiben und diesen in jeder Konfiguration wiederzuverwenden. Ermöglicht werden diese Funktionen durch die Templatesprache Jinja, mit der selbstgeschriebene Tests auch parametrisiert werden können. Neben eigenen Generic Tests, lassen sich auch weitere Packages in eure dbt-Umgebung integrieren, die eine Vielzahl an weiteren vordefinierten Tests mitbringen, beispielsweise  „expression_is_true“ oder „expect_column_values_to_be_between“. 

Deep Dive Singular Tests

dbt nutzt für Transformationslogiken SQL. Mit dem gleichen Mittel lassen sich spezifische Tests abbilden. Abbildung 3 zeigt einen Singular Test, der prüft, ob die Summe einzelner Bezahlungen „< 0“ beträgt. Liefert die SQL-Abfrage eine Ergebnismenge zurück, gilt der Test als fehlgeschlagen.

Abbildung 3: Singular Test für Bezahlungen. Datei: tests/assert_stg_payments_amount_positve.sql

Deep Dive Unit Test

Für einzelne Objekte lassen sich Mock-Daten generieren. Hier werden stg_customer-Beispieldaten für die Mailadresse sowie die customer_id und der erwartete Output definiert. dbt führt die Transformationslogiken mit den Mock-Daten aus und vergleicht diese mit dem erwarteten Output. 

Abbildung 4: Unit Tests. Datei: models/staging/stg_customers_unit_tests.yml

Operationalisieren der Tests

Warnung oder Abbruch

Die möglichen Konfigurationen in den YAML-Dateien sind nahezu unbegrenzt. Für die Tests lassen sich beispielsweise Error- und Warnlevel festlegen, also ab wann Tests für einen Abbruch sorgen oder lediglich eine Warnung generieren sollen. Abbildung 5 zeigt eine solche Konfiguration. Darüber hinaus lässt sich auch die Datenmenge definieren, die getestet werden soll. Dadurch können auch große Tabellen performant getestet werden, indem nur neue Daten geprüft werden und historische Daten ignoriert werden, da diese bereits in der Vergangenheit geprüft wurden. 

Abbildung 5: Testkonfiguration für das stg_order.sql-Modell. Dateien: models/staging/stg_order.yml

Ausführung mit #dbt test

Mit dbt test werden Tests ausgeführt. Dabei lässt sich einfach festlegen, welche Objekte geprüft werden sollen. Durch einen gezielten Start des Kommandos in eurem Scheduler steuert ihr den Ausführungszeitpunkt. Dabei kann der Ausführungszeitpunkt auch einfach mit einem Pull-Request gekoppelt werden, um sicherzustellen, dass nur sauber getestete Artefakte in die nächste Umgebung gelangen. 

Dokumentation

Ein weiteres Feature von dbt ist die automatische Erzeugung einer umfassende Dokumentation eures Datenprojektes. Darunter zählen auch vorhandene und konfigurierte Tests eurer Objekte. Damit können nicht nur die Entwickler:innen auf einen Blick die vorhandenen Tests einsehen, sondern auch Stakeholder, Prüfer:innen oder Fachanwender:innen. Mehr dazu in einem unserer folgenden Blogbeiträge zu dbt. Folgt uns gerne auf LinkedIn, um informiert zu bleiben.

Zusammenfassung

dbt bringt bereits mehrere Ansätze out-of-the-box mit, um Tests praxisnah, entwicklerfreundlich und einfach umzusetzen. Externe Testframeworks, in denen Tests oft umständlich nachkonfiguriert werden müssen, sind nun nicht mehr zwingend notwendig.

Die drei grundlegenden Teststrategien in der Übersicht:

FEATURE VORTEILE NACHTEILE
Generic Tests Schnell implementiert und hohe Wiederverwendbarkeit Für komplexe Businesslogiken nur eingeschränkt geeignet
Singular TestsMaximale Flexibilität für Business-LogikenHöherer Wartungsaufwand, eingeschränkte Wiederverwendbarkeit
Unit TestsSchnelles Feedback, unabhängig von QuelldatenInitialer Aufwand für Mock-Daten

Für saubere Daten in eurem Warehouse empfiehlt sich immer, eine Mischung der Teststrategien zu verwenden. Das schafft Vertrauen bei den Stakeholdern und schont die Nerven der Entwickler:innen.

Wie sieht eure Teststrategie aus? Nutzt ihr bereits die neuen Unit Tests oder setzt ihr auf externe Frameworks? Wir freuen uns auf den Austausch mit euch.

Seminarempfehlung

Senior Consultant bei ORDIX

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Montag, 14. September 2026

Sicherheitscode (Captcha)