adesso Blog

Ein Gamechanger für die Datenverarbeitung in Unternehmen sind metadatengesteuerte Datenpipelines. Anstatt bei jeder Änderung einer Datenquelle jeden Schritt manuell zu überarbeiten, nutzen diese Pipelines Metadaten (Daten über Daten), um Prozesse dynamisch zu aktualisieren. Dies kann Zeit sparen und Fehler reduzieren, da die Pipelines ihre Operationen auf der Grundlage der aktuellen Metadaten selbst konfigurieren. Kurz gesagt, metadatengetriebene Pipelines erhöhen die Effizienz und Flexibilität der Datenverarbeitung und ermöglichen es Teams, sich auf wichtigere Aufgaben als die manuelle Pipeline-Wartung zu konzentrieren.

Ähnlich wie die Pflege von klassischen Datenpipelines kann sich die Pflege von Metadaten als fehleranfälliger und repetitiver Engpass bei der Pflege und Weiterentwicklung eines Pipeline-Frameworks erweisen. In diesem Blog-Beitrag zeige ich anhand praktischer Beispiele, wie die Template-Sprache Jsonnet die Pflege von Metadaten erleichtert.

Die Grundpfeiler klassischer metadatengetriebener Pipeline-Frameworks

In der Architektur klassischer metadatengetriebener Pipeline-Frameworks stehen zwei Hauptkomponenten im Mittelpunkt: das ETL-Tool und das Metadaten-Repository.

Das ETL-Tool - ETL steht übrigens für Extraction, Transformation, Loading - ist das Arbeitspferd des Frameworks, das für die Durchführung der Datentransformationen verantwortlich ist. Es extrahiert Daten aus verschiedenen Quellen, transformiert diese Daten nach definierten Regeln und lädt sie schließlich in Zielumgebungen wie Datenbanken oder Data Warehouses.

Parallel dazu spielt das Metadaten-Repository eine wesentliche Rolle. Es dient als zentrale Ablage für Metadaten, die die Prozesslogik des ETL-Tools steuern. Zu diesen Metadaten gehören Informationen über Datenquellen, Zielstrukturen, Transformationsregeln und -sequenzen sowie das Mapping von Datenfeldern. Das ETL-Tool interagiert mit diesem Repository, liest die benötigten Metadaten und kann diese nach einem erfolgreichen Durchlauf auch aktualisieren, um den Stand der Datenverarbeitung widerzuspiegeln.

Zusammen bilden diese beiden Komponenten das Herzstück jedes metadatengetriebenen Pipeline-Frameworks, ermöglichen eine strukturierte und effiziente Datenverarbeitung und stellen sicher, dass die Datenbewegung nachvollziehbar und wartbar bleibt.

Standards für Metadaten-Repositories sind häufig dateibasierte Formate wie JSON und YAML oder tabellarische Formate wie relationale Datenbanktabellen.

Mehr über das Thema Metadata Driven Pipelines for Microsoft Fabric findet ihr im Microsoft Community Hub. Dort wird ein metadatenbasiertes Pipelineframework für Microsoft Fabric vorgestellt.

Die Herausforderungen manueller Metadatenpflege und die Lösung durch Jsonnet

Obwohl Metadaten die Ladeprozesse vereinfachen können, kann sich die Pflege von Metadaten auch als kostspielig erweisen. Häufig müssen ähnliche Metadaten in unterschiedlicher Form und an unterschiedlichen Stellen wiederholt werden, was zu erhöhtem Pflegeaufwand und Inkonsistenzen führen kann. Die manuelle Aktualisierung von Metadaten bei jeder Änderung der Datenstruktur oder des Verarbeitungsprozesses ist nicht nur zeitaufwändig, sondern auch anfällig für menschliche Fehler.

Enter Jsonnet

Jsonnet bietet hier eine effiziente Lösung. Jsonnet ist eine Open-Source-Template-Sprache, die speziell für die Generierung von JSON-Daten entwickelt wurde und sich besonders für die Automatisierung von Konfigurationsdateien eignet. Jsonnet ermöglicht die programmatische Definition von Metadaten und die Erstellung wiederverwendbarer Templates.

Mehr über die Jsonnet Configuration Language findet ihr auf dieser Webseite.

Mit Jsonnet können komplexe Metadatenstrukturen durch einfache und klare Abstraktionen definiert werden, wobei sich wiederholende Elemente durch Funktionen und Variablen vermieden werden. Wenn eine Änderung erforderlich ist, kann sie an einer zentralen Stelle vorgenommen werden, von der aus Jsonnet automatisch alle Instanzen dieser Metadaten im gesamten Projekt aktualisiert. Dies eliminiert nicht nur Redundanzen, sondern spart auch wertvolle Zeit und minimiert das Fehlerpotenzial.

Die Automatisierung der Metadatenpflege mit Jsonnet trägt dazu bei, dass sich die Datenteams mehr auf die Optimierung der Datenverarbeitung und -analyse konzentrieren können, anstatt sich in den Tiefen der manuellen Metadatenpflege zu verlieren.

Let's see an example

Zur Veranschaulichung erstellen wir ein einfaches Beispiel. In einer JSON-Datei definieren wir eine Liste von JSON-Objekten, die Datenbanktabellen auf einem SQL-Server repräsentieren, die wir als Datenquellen für eine Datapipeline betrachten. Jede Datenbanktabelle entspricht einem JSON-Objekt mit folgenden Attributen: Server, Datenbank, Schema, Tabellenname und Tags. Tags können beispielsweise verwendet werden, um den Ladevorgang für eine Untermenge von SQL-Tabellen im ETL-Tool zu starten.

In unserem Beispiel definieren wir drei Tabellen: customer, purchase und vendor.

In Jsonnet könnte die Konfigurationsdatei wie folgt aussehen:

	
	// Table definitions
	local tables = ["customer", "purchase", "vendor"];
	// Data source definition
	local server = 'sql-server.company.com';
	local db = 'database';
	local schema = 'dbo';
	// Create a json array of table metadata by iterating over tables
	[
	    {
	        server: server,
	        db: db,
	        schema: schema,
	        table: t,
	        tags : [
	            "server:" + server,
	            "db:" + server + "-" + db,
	            "schema:" + server + "-" + db + "-" + schema,
	            "table:" + server + "-" + db + "-" + schema + "-" + t
	        ]
	    } for t in tables
	]
	

Die Tags werden automatisch aus den Tabellenattributen als verkettete Strings generiert. Das JSON-Array der Quellen wird über eine List-Comprehension-Notation ähnlich der von Python erzeugt. Jsonnet erlaubt Inline-Kommentare, um die Lesbarkeit zu verbessern.

Nach der Installation von Jsonnet (mit ubuntu in Docker: `apt install jsonnet`) "kompilieren" wir den jsonnet-File zu JSON mit `jsonnet sql_sources.jsonnet > sql_sources.json`:

Die erzeugte JSON-Datei sieht wie folgt aus:

	
	[
	   {
	      "db": "database",
	      "schema": "dbo",
	      "server": "sql-server.company.com",
	      "table": "customer",
	      "tags": [
	         "server:sql-server.company.com",
	         "db:sql-server.company.com-database",
	         "schema:sql-server.company.com-database-dbo",
	         "table:sql-server.company.com-database-dbo-customer"
	      ]
	   },
	   {
	      "db": "database",
	      "schema": "dbo",
	      "server": "sql-server.company.com",
	      "table": "purchase",
	      "tags": [
	         "server:sql-server.company.com",
	         "db:sql-server.company.com-database",
	         "schema:sql-server.company.com-database-dbo",
	         "table:sql-server.company.com-database-dbo-purchase"
	      ]
	   },
	   {
	      "db": "database",
	      "schema": "dbo",
	      "server": "sql-server.company.com",
	      "table": "vendor",
	      "tags": [
	         "server:sql-server.company.com",
	         "db:sql-server.company.com-database",
	         "schema:sql-server.company.com-database-dbo",
	         "table:sql-server.company.com-database-dbo-vendor"
	      ]
	   }
	]
	

Die in diesem Beispiel verwendeten Funktionen stellen nur einen Bruchteil der Jsonnet-Sprachfunktionen dar. Weitere Optionen sind Bedingungslogik, Templates und benutzerdefinierte Funktionen.

Jsonnet in einem Metadaten-Deployment-Workflow

Das folgende Diagramm zeigt einen beispielhaften Deployment Workflow auf Azure, der jsonnet zur Erzeugung der Metadaten verwendet.

  • 1. Ein User editiert die .jsonnet-Metadaten-Templates (Beispiel: Hinzufügen neuer Tabellendefinitionen, Erstellen einer neuen Version, etc.)
  • 2. Git Push zum Metadaten Repository
  • 3. Eine Azure Pipeline...
    • a. ... erzeugt .json Dateien aus den .jsonnet Templates
    • b. ... lädt die generierten .json Dateien in einen Azure Blob Storage.
  • 4. Die Data Factory greift beim nächsten Trigger-Run auf die neue Version der Metadaten im Azure Blob Storage zu.

Fazit

Metadatengesteuerte Datenpipelines haben zweifellos das Potenzial, die Art und Weise, wie Unternehmen Daten verarbeiten, zu revolutionieren. Sie erleichtern die Entwicklung von Datenpipelines, bringen aber auch eigene Herausforderungen mit sich, da sie konsistente Metadaten erfordern. Wie dieser Blog-Beitrag zeigt, bietet Jsonnet eine effiziente Lösung für diese Herausforderungen.

Bild Stefan Klempnauer

Autor Dr. Stefan Klempnauer

Stefan Klempnauer ist Data & Analytics Consultant mit den Schwerpunkten Datenplattformen, Cloud-Infrastruktur und KI. Bei adesso konzipiert und implementiert er Datenplattformlösungen in Kundenprojekten.

Diese Seite speichern. Diese Seite entfernen.