Die generische Verarbeitung komplexer XML-Strukturen in einer relationalen Datenbank oder einem Data Lake (auf Hadoop-Basis) ist eine anspruchsvolle Herausforderung für Software-Entwickler. saracus consulting hat seine Data Warehouse Automatisierungs-Software DWautomatic um diese Funktionalität erweitert.
An folgendendem Beispiel soll die Funktionalität und Arbeitsweise dargestellt werden.
In der Logistikbranche ist das Tracking von Transportsendungen unverzichtbar für das Erreichen einer hohen Liefertreue. Dafür müssen Daten zwischen verschiedenen Informationssystemen ausgetauscht werden. Dies geschieht häufig mit XML/XSD-Dateien. In unserem Beispiel beschreiben rekursive XSD-Dateien eine Struktur zur Beantwortung von Fragen wie:
- Wo ist mein Paket gerade?
- Wo war es vorher?
Erwartungen
- ynamisches Mapping der XML-Strukturen auf relationales Schema, Kreieren der Tabellen
- Laden der zum XSD- gehörenden XML-Dateien
- Performance: 1.000 XML-Dateien in der Minute
Herausforderungen
- Welches ist der geeignete Tabellen-/Spaltenname?
- Durch ‚Hochziehen‘ der 0:1‑Beziehungen ist der XML-Element-Name nicht eindeutig
- Aber: Der Pfadname ist eindeutig
- ORACLE-Problem
- Namen dürfen höchstens 30 Zeichen umfassen
- Beim Parsen der XML-Dateien
- Zuordnung von XML-Elementen auf passende Tabelle und Spalte
Lösungsansätze
- Erster Ansatz
- Je XSD-Struktur eine Tabelle (im Hinblick auf Data Vault-Modellierung)
- Problem: mehrere hundert Tabellen
- Zweiter Ansatz
- Nur noch 1:n Beziehungen auslagern (Master-Detail)
- Problem: mehrere hundert Tabellen
- Dritter Ansatz
- Mehrfach genutzte Unterstrukturen nur noch einmal anlegen
- In eine solche Tabelle den Pfad zum Parent aufnehmen, um die ‚Lesbarkeit‘ zu erhöhen
- Reduktion auf ca. 50 Tabellen
Implementierung
- Um den initialen Aufwand klein zu halten, 1. Implementierung für Schema-Kreierung mit JAXB
- Übersetzt XSD-Schema in Java-Klassen, die dann mit Reflection ausgewertet werden können
- Ladephase mit STAX (schneller XML-Parser), um Performance-Anforderungen zu bewältigen
- Zusätzlich zu den XSD-Tabellen ein Mini-Dictionary für
- Erzeugte Tabellen
- Spalten
- Hierarchien
Zusammenfassung: XML-Verarbeitung mit DWautomatic (Generische Verarbeitung komplexer XML-Strukturen in relationale Strukturen)
- Tabellarische Auflösung komplexer XML-Strukturen unter Beibehaltung der Relationen
- Generierung eines Datenbankschemas aus XSD-Dateien
- Erzeugung valider Objekte in jeweiliger RDBMS
- Hoch performante Implementierung in JAVA
- Verarbeitung der XML-Nachrichten mit schnellem STAX-Parser aus einer Message Queue
- Vollständige Schlüsselvererbung über alle Ebenen
- Das Datenmodell muss nach einer XSD Änderung wahlweise komplett neu generiert werden können
- Hohe Performance durch Parallelisierung
- Ausschluss bestimmter XML-Pfade über komfortable Konfigurationstabelle
- Ein- und ausschaltbare XML-Validierung
- Option: Generierung identischer Wiederholungselemente (Typen) in unterschiedlichen Pfaden entweder in eine gemeinsame oder je eine eigene Tabelle
- Längen der Datentypen sollten der XSD entnommen werden. Wenn dort keine Werte definiert sind, sollten Standards aus einer Konfigurationstabelle genommen werden.
- Dokumentation erzeugter Tabellen über automatisierte Dictionary-Erzeugung