In den vorangegangen How To’s haben wir bereits eigene Transformationen angelegt. Neben Transformationen können im Menü der Pentaho Data Integration Suite aber auch sogenannte Jobs neu angelegt und mit einzelnen Verarbeitungsschritten befüllt werden. Was ist also der Unterschied zwischen einem Job und einer Transformation, und wann setzen wir besser das eine, wann das andere Steuerelement ein?
Transformationen
Der Grundgedanke einer Transformation ist, dass diese aus einer bestimmten Quelle eine Menge von Daten erhält, diese Daten dann in beliebiger Form prüft, ändert, anreichert oder reduziert und wieder in einem Ziel speichert. Das Lesen, Bearbeiten und Schreiben der Daten geschieht dabei im Idealfall parallel, denn alle Einzelschritte einer Transformation werden gleichzeitig gestartet. Die gleichzeitige Verarbeitung innerhalb einer Transformation ist ein grundlegendes und sehr hilfreiches Prinzip von PDI, bereitet aber auch insbesondere Anfängern immer wieder gerne Verständnisprobleme. Bricht etwa eine Transformation während ihrer Ausführung ab, so besteht erst einmal grundsätzlich keine Transaktionssicherheit, es kann also ein Teil der Daten bereits verarbeitet und festgeschrieben sein, während ein anderer Teil der Daten noch gar nicht geladen wurde.
Jobs
Im Gegensatz dazu geschieht die Verarbeitung innerhalb eines Jobs schrittweise und damit transaktionssicher. Die zwischen dem „Start„- und „Success„-Schritt liegenden Elemente werden also alle nacheinander und vollständig ausgeführt. Der Job-Designer bietet zusätzlich im Ordner „Conditions“ auch mehrere Möglichkeiten, verzweigte Verarbeitungsketten aufzubauen. So können etwa abhängig davon, ob eine Datei vorhanden oder ein bestimmter Parameter gesetzt ist, auch unterschiedliche Verarbeitungswege durchlaufen werden.
Das entscheidende Zusammenspiel von Jobs und Transformation besteht nun darin, dass ein Job in der Lage ist, einzelne Transformationen zu starten. Diese können somit hintereinander und, abhängig von äußeren Parametern gesteuert, auch in unterschiedlicher Reihenfolge ausgeführt werden. Weiterhin kann ein einzelner Job auch wiederum mehrere untergeordnete Jobs beinhalten und diese, gleichermaßen wie eine Transformation, auch getrennt voneinander ausführen.
Die Jobs übernehmen in PDI also im Regelfall die äußere Steuerung des Ablaufs, bestimmen den Weg der Verarbeitung und starten dann die einzelnen Transformationen, welche wiederum die Datensätze bearbeiten und bewegen. Häufig prüfen die äußeren Jobs auch die Datenquellen zunächst auf Vorhandensein oder bereiten die Datenquelle auf, bevor dann in der Transformation darauf zugegriffen wird.
Fallbeispiel
Abschließend zur Übung ein kleines Fallbeispiel anhand folgendem Szenario: Täglich soll eine Datei mit den heutigen Verkaufszahlen zunächst per FTP geladen und dann auf die lokale Datenbank geschrieben werden. Einmal monatlich trifft zusätzlich eine Datei mit kumulierten Monatswerten ein, die in eine andere Tabelle geschrieben werden soll. Wie könnte dieser Ablauf mit Jobs und Transformationen strukturiert abgebildet werden?
Ein möglicher Lösungsvorschlag: Zunächst werden zwei Transformationen erstellt, die jeweils aus der täglichen bzw. aus der monatlichen Datei die Daten lesen und in die entsprechende Tabelle schreiben können. Dann werden zwei zugehörige Jobs erstellt, „Daily Data Load“ und „Monthly Data Load“, die jeweils die tägliche bzw. die monatliche Datei per FTP laden, ggf. auf Vorhandensein prüfen, umbenennen etc. und lokal bereitstellen, und schließlich die jeweils zugehörige Transformation starten. Abschließend wird ein übergeordneter Job „Data Loader“ erstellt, der zunächst ohne Bedingung immer den „Daily Data Load“-Job startet, dann auf das Datum prüft und nur zum Monatsersten auch den „Monthly Data Load“ ausführt. Dieser übergeordnete Job kann dann täglich per Scheduler gestartet werden und die Verarbeitung geschieht wie gewünscht.