Pentaho Data Integration – PDI Tutorial 1: TXT zu XML

This article is also available in english

In diesem Tutorial bauen wir eine erste einfache Transformation in Kettle, in der Daten aus einer kommaseparierten Textdatei in eine XML-Ausgabe gewandelt werden.
Als Datenquelle liegen beispielsweise folgende Datensätze aus einer Filmsammlung als Textdatei vor:

ktx_TextdatenInput

Als ersten Schritt starten wir Spoon, öffnen über das File-Menü eine neue Transformation und ziehen im Designer aus den Input-Elementen einen “Text file input”-Schritt auf die Arbeitsfläche.

ktx_TextFileInput

Über einen Doppelklick auf diesen Schritt öffnet sich die Konfiguration. Hier muss auf dem ersten Reiter zunächst die oben erwähnte Textdatei über den Dateidialog ausgewählt werden. Auf dem “Content”-Reiter können genauere Einstellungen zum Format der Textdatei vorgenommen werden, etwa das Trennzeichen oder ob eine Header-Zeile vorhanden ist. Die Standardeinstellungen sind aber für unser Beispiel genau richtig.

Auf dem Reiter “Fields” werden die in der Textdatei enthaltenen Spalten definiert. Über den Button “Get Fields” geschieht dies automatisch durch Kettle, indem einige Zeilen der Datei eingelesen und analysiert werden.

ktx_TextInputGetFields

Die als Integer erkannte Jahreszahl sollte ebenso wie die anderen Felder auf String zurückgestellt werden um auch allgemeine Datensätze einlesen zu können. Weiterhin sollte aus dem gleichen Grund die Feldlänge, die auf das Maximum der vorhandenen Datensamples gesetzt wird, großzügig erweitert werden – das Semikolon dient hier im Beispiel ja als eindeutiger Trenner der Datenfelder. Der Trim type “both” bewirkt, dass eventuell vorhandene Leerzeichen am Anfang oder am Ende der Textdaten schon beim Einlesen entfernt werden.

ktx_TextInputGetFieldsBearbeitet

Soweit zum Daten-Input. Für die Ausgabe ziehen wir nun aus dem Output-Bereich des Designers einen “XML Output” auf die Arbeitsfläche und verbinden über die mittlere Maustaste oder das Kontextmenü die beiden Schritte miteinander.

ktx_XMLOutputDazu

Die Konfiguration geschieht hier ebenso per Doppelklick auf den Schritt. Im ersten Reiter muss wieder der Speicherort der Ausgabedatei über den Dateidialog angegeben werden. Auf dem Reiter “Content” können optional die Namen des XML-Root-Knotens und der darunterliegenden Knoten angegeben werden. Hier im Beispiel ändere ich die Einträge auf “Filme” und “Film”.

ktx_XMLOutputKonfig

Auf dem Reiter “Fields” können wieder über den “Get Fields”-Button die im Stream bereits vorhandenen Datenfelder automatisch erkannt werden. Sie entsprechen den Datenfeldern aus dem angeschlossenen “Text input”-Schritt. Für einen fehlerfreien Lauf der Transformation muss hier noch eingetragen werden, ob ein Datenfeld jeweils als XML-Element oder als XML-Attribut des entsprechenden Knotens ausgegeben werden soll.

ktx_XMKonfigurieren2

Und schon sind wir startklar! Auf der Arbeitsfläche klicken wir nun den “Play”-Button links oben zum Start der Transformation, im folgenden Konfigurationsdialog nochmals auf “Launch”. Gegebenenfalls erscheint noch der Dialog zum Speichern der neuen Transformation – falls wir das nicht schon vorher getan haben.

Nach der Ausführung werden die erfolgreich durchlaufenen Schritte mit einem grünen Häkchen markiert. Unten im Reiter “Execution Results” wird für jeden Schritt die Anzahl der verarbeiteten Datensätze angezeigt. Sollten Fehler auftreten, wird der betroffene Schritt rot markiert und im “Logging”-Reiter werden weitere Details zur Fehlerursache ausgegeben.

ktx_TrafoExecutionResults

Wir öffnen die im XML-Schritt angegebene Ausgabedatei und schauen uns das Ergebnis an. Wie erwartet enthält die Datei ein “Filme”-Element, in dem vier Film-Einträge als XML-Datensatz enthalten sind. Die Felder “Dauer” und “Jahr” werden als Attribut des “Film”-Elements ausgegeben, “Filmtitel”, “Genre” und “Regal” werden dagegen als eigene, untergeordnete XML-Elemente ausgegeben.

ktx_output

Mein Kommentar...