Übersetzung des Blog-Posts „Using Kettle for EII“ von Nicholas Goodman. Mit freundlicher Genehmigung des Autors.
You want to read the english language original of this article? Click the above link!
Pentaho Data Integration (ehemals Kettle) kann für ETL-Prozesse verwendet werden, es lässt sich aber auch in EII-Szenarios (Enterprise-Information-Integration) einsetzen. Nehmen wir zum Beispiel mal an, wir haben einen Report, der aus einem CRM-System heraus aufgerufen werden kann und es dem Kundenservice-Mitarbeiter erlaubt, alle aktuell offenen Anfragen aus der CRM-Datenbank zu sehen. Gleichzeitig soll der Report aber auch eine strategische Übersicht über den jeweiligen Kunden liefern, um die Wirtschaftlichkeit beurteilen zu können. Die Daten dazu kommen aus einem Data-Warehouse. Der Report bezieht seine Daten also aus zwei verschiedenen Quellen, bei denen möglicherweise verschiedene Datenbank- und Betriebssysteme zum Einsatz kommen. Mit Kettle ist es ein Leichtes, die Daten zusammenzufassen und dank der Integration in die Pentaho-BI-Suite kann aus den Daten direkt ein Report erzeugt werden, ohne dass sie zwischendurch erst in irgendwelchen temporären Tabellen abgelegt werden müssten. Es ist leider noch NICHT möglich, die Kettle-Transformation in den Tools zur visuellen Report-Erstellung („Report Designer“ und „Report Design Wizard“) wärend der Report-Erstellung als Datenquelle zu definieren. Das ist ein wichtiger Punkt, der nicht oft genug wiederholt werden kann:
Seit Pentaho 1.6 stellt Pentaho zur Laufzeit EII-Funktionalität zur Verfügung, nicht aber während der Design-Phase.
Man kann also eine ETL-Transformation als Quelle eines Reports nutzen und man kann sich den Beweis dafür im Verzeichnis „samples/etl“ der Pentaho-BI-Suite-Demo ansehen. Was ist also der beste Weg, um Reports mit dieser Funktionalität zu erstellen? Wie viele Andere, die die Pentaho-BI-Suite nutzen, möchte ich den Report Designer nutzen, um meinen Report visuell zu gestalten, die Daten sollen aber aus einer EII-Transformation kommen. Wie das geht, erfahrt ihr hier.
Schritt 1: Erstellen des Datensatzes
Erstelle eine ETL-Transformation, bei der am Ende die gewünschten Daten stehen. Dabei können alle Möglichkeiten genutzt werden, Datenbanken, Lookups, Berechnungen, Excel-Files, was auch immer. Wenn das Ganze später auf einem Pentaho-1.6-Server laufen soll, dann sollte Kettle 2.5.x verwendet werden, denn die neueren Versionen werden nicht voll unterstützt. Als Beispiel habe ich hier mal eine ganz einfach Transformation erstellt, die Verkaufszahlen berechnet indem Anzahl und Preis multipliziert werden.
Schritt 2: Füge einen Tabellen-Output zur Transformation hinzu

Wir werden jetzt eine Tabelle erzeugen, die NUR als Dummy-Datensatz für das Report-Design dient. Dafür kann jede beliebige Datenbank zum Einsatz kommen, die einem gerade zur Verfügung steht. (Vielleicht habt ihr eine lokale MySQL-Installation? Oder ihr habt den Pentaho-Server lokal installiert? Dann kann auch dessen Hypersonic-Datenbank genutzt werden.) Um die nötige Tabelle zu erstellen fügt man der Transformation einfach einen Table-Output-Schritt hinzu und klickt in diesem auf den „SQL“-Button. Kettle spuckt daraufhin das nötige SQL-Statement aus, welches direkt von dort aus ausgeführt werden kann. Gib‘ der Tabelle irgendeinen blöden Namen, zum Beispiel „MYTEMPTABLE“.
Schritt 3: Die temporäre Tabelle mit Daten füllen
Nachdem die Tabelle angelegt ist, muss man nur noch die Transformation laufen lassen, um einen Abzug der aktuellen Daten in die Tabelle zu bekommen. Diese Tabelle kann dann dazu dienen, den Report zu gestalten.
Schritt 4: Den Report gestalten
Öffne den Report Designer. Lege die gerade erstellte temporäre Tabelle als Datenquelle an. Erstelle den Report, so, wie du es gewöhnt bist. In diesem Schritt passiert nichts besonderes, wir erstellen lediglich einen normalen Report auf Basis einer normalen Datenbank-Tabelle.
Schritt 5: Testen des Reports auf dem Pentaho-Server
Lege den Report mit Hilfe der Funktion „Publish“ (oder „Publish to Server“) auf dem Test-Server ab, so dass man ihn dann über das Pentaho-Web-Interface erreichen kann. Ich habe den Report zum Beispiel in samples/etl abgelegt, so dass er dort Seite an Seite mit den ETL-Beispielen steht, die bei der Standard-Installation des Demo-Servers dabei sind.

Überprüfe, dass der Report im Web-Interface erscheint und teste seine Funktion. Ok, unser Report (etlexample.xaction) läuft wie geschmiert. Auch in diesem Schritt haben wir nichts außergewöhnliches getan, das ist ja immer noch der langweilige Report, der seine Daten ganz normal aus der temporären Tabelle „MYTEMPTABLE“ ausliest.
Schritt 6: Die PDI-Transformation auf dem Server ablegen
Es ist zwar nicht zwingend erforderlich aber doch eine sehr gute Idee, in der Transformation den letzten Hop (von „for_pentaho“ zum Table Output) zu deaktivieren. Wenn der Report ausgeführt wird, wollen wir ja schließlich keine INSERT-Statements erzeugen. Wir speichern die Transformation unter dem Namen kettleexample.ktr im Verzeichnis samples/etl, wo auch schon die Datei etlexample.xaction liegt. Man kann die Datei auch an beliebigen anderen Orten ablegen, es macht aber Sinn, alles beisammen zu haben.
Schritt 7: DB durch PDI ersetzen
Um hinterher beide Versionen vergleichen zu können, mache ich erst mal eine Kopie von meiner etlexample.xaction-Datei, die ich etlexample2.xaction nenne. Diese rufe ich im Design Studio auf, um folgende Änderungen durchzuführen:

Als erstes ändere ich den Namen der Action-Sequenz von „ETL Transformation“ nach „ETL Transformation – NO TABLES“.

Als nächstes muss die Datenquelle gelöscht werden. Dafür markiere ich das „rule“-Element und klicke auf das rote X.

Als Drittes füge ich ein „Get Data From Pentaho Data Integration“-Element VOR dem „report“-Element ein.
Viertens: Konfiguriere das PDI-Element wie im Screenshot:

Das haben wir hier getan: Wir haben angegeben, dass unsere Daten aus der PDI-Transformation „kettleexample.ktr“ kommen sollen. Außerdem haben wir noch zwei andere wichtige Informationen eingetragen: Wir haben der Komponente gesagt, dass die Daten aus dem ETL-Schritt „for_pentaho“ kommen sollen. Dort werden die Daten also abgesaugt und stehen dann als Ergebnis zur Verfügung. Deshalb haben wir als zweiten Punkt auch den Namen für das Ergebnis angegeben, unter dem dann der Report auf die Daten zugreifen kann. Wir nennen das Ergebnis hier „final_result“.
Zu guter Letzt markieren wir noch das Report-Element und legen fest, dass die Report-Daten aus diesem „final_result“ kommen sollen. Sonst muss am Report nichts mehr gemacht werden.

Schritt 8: Teste deinen neuen Report

Rufe den neuen Report „ETL Example – NO TABLE“ über das Pentaho-Web-Interface auf. Es sollte jetzt das gleiche Ergebnis zu sehen sein, wie beim vorherigen Report. Der einzige Unterschied ist, dass dieser Report nicht mehr die Datenbanktabelle „MYTEMPTABLE“ benutzt sondern seine Daten direkt aus der PDI-Transformation bezieht.
Gratulation! Du hast dir damit das Handwerkszeug erarbeitet, mit dem du EII-Reports mit dem gleichen Tool visuell gestalten kannst, wie normale Reports. Alle Möglichkeiten von PDI stehen dir damit für deine Reports offen.
Das Beispiel findest kannst du hier als ZIP-Datei (eiiexample.zip) herunter laden. Der Autor des englischen Original-Textes hatte das Ganze mit Version 1.2 des Pentaho-Servers getestet, ich habe 1.6 und auch schon die noch nicht veröffentlichte Version 1.7 ausprobiert, da geht es auch. Feedback, sowohl hier als auch natürlich auf der Website des Original-Artikels, ist sehr willkommen!