ETL mit Talend – Aus der Praxis für die Praxis

Erste Orientierung beim Aufsetzen einer Lösung mit Talend ETL

Autor: Christian Neundörfer, engenious GmbH

In jedem Unternehmen entstehen täglich vielerlei Daten und mit deren Sammlung ein nicht zu unterschätzender Schatz. Wichtig ist es, diesen Schatz auch zu heben. Konkret geht es darum, die Daten nicht einfach nur zu sammeln, sondern diese in geeigneter Form in Datenbanken und CRM-Systemen zu verwalten und vor allem auszuwerten. Bevor dies möglich ist, müssen die Daten zuvor normiert werden. Das bedeutet, dass Daten aus unterschiedlichen Quellen und in unterschiedlichen Strukturen auf ein gemeinsames und auswertbares Format zu bringen sind, bevor Berichte und Auswertungen möglich sind.
Zur automatisierten Verarbeitung von Daten bieten sich zahlreiche Datenbanken und ETL-Werkzeuge (ETL = Extract + Transform + Load) an. Ein mögliches ETL-Werkzeug finden wir mit Talend ETL bei der Firma Talend. Wesentliche Besonderheit bei Talend ist, dass man dort im Vergleich zu anderen Werkzeugen, wie bspw. Integration Services von Microsoft, auf JAVA und nicht auf C# setzt. Neben einer Open Source Variante gibt es bei Talend auch unterschiedliche Lizenzversionen, die sich an ganz unterschiedliche Anforderungen richten. Neben einer reinen Cloud-Lösung gibt es klassische Desktop Installationen für MAC OSX / Linux und Windows.

Gut gelöst aus Sicht des Autors ist die grafische Oberfläche, mit der viele Aufgaben per Drag-and-drop gelöst werden können. Jederzeit kann man auch per JAVA Code Einfluss auf den Prozessablauf nehmen, wenn die hinterlegten Funktionen nicht ausreichen sollten. Die Zusammenstellung verschiedener Prozessabfolgen und deren Bestandteile werden als Projekt bezeichnet. Ein fertig erstelltes Projekt kann als Stand Alone Job überall hin exportieren werden. Abhängigkeiten sind in die einzelnen Jobs inkludiert und dadurch sind dieses eigenständig lauffähig, ähnlich wie ein Batchfile. Die Automatisierung der Durchführung von Jabs kann dann bspw. mithilfe von Windows Bordmitteln durch Schedulings realisiert werden.

Wer jungfräulich mit Talend ETL startet, ist oft auf der Suche nach Best Practices aus dem Erfahrungsschatz anderer. Denn diese erleichtern den Einstieg enorm. Daher werden im Rahmen dieses Blogbeitrags im Folgenden einige dieser Erfahrungswerte zur Erleichterung des Einstiegs und der Erfüllung erster Aufgaben ein paar wesentliche Tipps wiedergegeben:

Layout / Gestaltung des Arbeitsbereichs
Eine gute Organisation der Arbeitsmittel und Ordnung am Arbeitsplatz erleichtert die gesamte Arbeit. Genau so ist es auch bei der Gestaltung und Ablage der einzelnen Komponenten der Prozessgestaltung. Für eine gute Lesbarkeit hat es sich bewährt, die einzelnen Komponenten in einem gleichmäßigen Raster und Abstand einheitlich im Designer abzulegen. Optimal ist ein Abstand zwischen 3 und 5 Kästchen, denn damit passt nicht nur eine adäquate Anzahl Schritte auf die Oberfläche, sondern es findet sich auch ein anderer Entwickler und die Krankheits- und Urlaubsvertretung schnell zurecht.

Kurze Zusammenfassung als Label
An besonders kritischen oder erklärungsbedürftigen Stellen bietet es sich an, die Kommentarsektion zur Kommentierung einer Komponente zu nutzen. Wer diese Möglichkeit nutzt, kann nicht nur für seine Kolleginnen und Kollegen wichtige Sachverhalte erläutern, sondern auch für sich selbst Informationen ablegen, warum der Schritt genau so und nicht anders gestaltet wurde. Denn wer weiß bei komplexen Sachverhalten nach mehreren Monaten automatisiertem Durchlauf noch genau, warum der Ansatz an einer bestimmten Stelle so kompliziert war?!

Tlogs
Jeder, der schon einmal in einem schlecht oder gar nicht dokumentierten System Fehler gesucht hat, weiß, wie hilfreich ein gutes Logging sein kann. Diese Komponente ist bei der späteren Fehlersuche Freund und Helfer in der Not. Zumindest abschnittweise Loggingfunktionen wie die Tlogs einzubinden kann kein Fehler sein. Schließlich lassen sich die Logs auch einzeln aktivieren bzw. deaktivieren. Bei der Fehlersuche kann dann komfortabel an den gewünschten Stellen geloggt werden.

Prejob:
Der ideale Helfer, um die Bude aufzuräumen, bevor der Besuch kommt. Mit diesem Objekt lassen sich allerlei Sachverhalte abarbeiten, bevor der aktuelle Job beginnt. Verzeichnisse aufräumen, Verbindungen checken, Formate prüfen, all das ist gut aufgehoben in einer Vorverarbeitung.

TMAP:
Der Liebling des Autors. Mit diesem Objekt lassen sich Prozessverzweigungen bzw. Routen einfach erstellen und Bedingungen im Sinne von „wenn …, dann …“ definieren. Auch eine direkte Datenmanipulation bzw. Transformation ist spalten spezifisch möglich.


Bild 1: Beispiel wie Transformationen in Tmap gelöst werden können.

Inputdaten können auf beliebig viele Abzweigrouten aufgesplittet werden. Die tMap-Komponente stellt daher eine echte Geheimwaffe dar und präsentiert sich als echter Allrounder. Mit dem Expression-Filter kann eine Definition erstellt werden, die ausgewählte Datensätze in einen bestimmten Ausgang schreibt.


Bild 2: Beispiel für eine einfache Bedingung in Tmap.

Bei großen Tabellen bzw. Schemata hilft der Column Filter, um gezielt Wunschspalten auszuwählen.

TSendMail:
Mit dieser Komponente kann man bei definiertem Bedingen bzw. Verzweigung eine E-Mail mit beliebigem Kontext versenden. Hierfür wird dann aber ein SMTP Host benötigt.

Talend globalMap
Global Nutzbare Variablen sind bei vielen Anforderungen das erste Mittel der Wahl, um Informationen aus einzelnen Schritten im Projekt zu speichern und in weiteren Schritten und/oder Komponenten zu nutzen. Hierfür bietet Talend eigens vordefinierte Variablen an. Neben den vordefinierten können aber auch eigene die wie folgt deklariert werden:

globalMap.put(„foobar“, „Hello World!“);
System.out.println((String) globalMap.get(„foobar“));

Alternativ kann hierfür auch die Komponente tSetGlobalVar verwendet werden. Hierfür bietet sich auch als weitere Alternative die Möglichkeit dies mit TJava zu lösen.

OnSubjobOK und OnComponentOK
Einzelne Komponenten können nicht nur mittels Datenflusses verbunden werden, sondern auch über einen Trigger.
Zwei mächtige Vertreter hierfür sind OnSubjobOK und OnComponentOK. Beide kommen bevorzugt zum Einsatz, wenn es darum geht, mehrere einzelne Jobs zu einem Hauptjob zu verbinden. Der Unterschied zwischen beiden liegt im Startverhalten. Während OnSubjobOK den Subjob erst dann startet, wenn der vorherige Subjob komplett abgeschlossen ist, startet OnComponentOK den Subjob direkt, wenn die vorherige Komponente abgeschlossen wurde.

Null-Pointer-Exceptions
Um Null Pointer Exceptions zu vermeiden sollten NULL-Werte immer abgefangen werden.

!RelationaleDaten.ISNULL(row1.StartDatum) && row1. StartDatum!=““?TalendDate.parseDate(„yyyy-MM-dd“, „2015-02-19“): TalendDate.parseDate(„yyyy-MM-dd“, „1983-01-01“)

Hierbei stehen die verwendeten Befehle für folgende Sachverhalte:

  • RelationaleDaten.ISNULL(null) für das Prüfen von Strings ob der wert NULL ist oder nicht.
  • TalendDate.isDate(„yyyy-MM-dd“, „2022-05-01“) für Datum Validierungen
  • StringHandling.TRIM(string); // für das Trimen von Leerzeichen (nicht in obigem Beispiel enthalten!)

tJava, tJavaRow und tJavaFlex
Mit den oben genannten Komponenten besteht die Möglichkeit, Java-Code in Integrationsjobs einzubinden.
tJava kommt zum Einsatz, um, Java-Code als separaten Sub Job auszuführen. Hierbei wird der Java-Code genau ein einziges Mal ausgeführt. Bei tJavaRow wird der Java-Code für jeden einzelnen Datensatz ausgeführt, weshalb tJavaRow häufig als verbindende Komponente verwendet wird, um auf den Input-Flow zuzugreifen. Bei Initialisierungs-Prozessen zu Beginn eines Subjobs oder bei Operationen am Ende des Subjobs ist die Komponente tJavaFlex zu empfehlen.

Zum Autor: Christian Neundörfer ist Entwickler und Berater bei engenious. Er entwickelt leidenschaftlich Lösungen auf Basis neuester Technologien und Versionen. Sein Hauptaugenmerk liegt dabei auf der Verarbeitung von Daten mit unterschiedlichsten Werkzeugen und Datenbanktechnologien. Er kennt deren Vor- und Nachteile wie kein anderer.

Bildnachweis:
Bild 1: URL: https://www.pexels.com/de-de/foto/person-die-auf-papier-zeigt-669614/
Bild 2+3: Screenshots Christian Neundörfer, engenious GmbH