Kettle-Grundlagen
Zielsetzung
Das Anwendungsspektrum vom OpenSource-Werkzeug zum Datenmanagement Kettle / Pentaho Data Integration reicht vom Kopieren einzelner Daten zwischen zwei Quellen bis zum professionellen "Data Warehousing". Für diesen Zweck bietet das Werkzeug eine mächtige Funktionalität und graphische Oberfläche. Die Nutzung des Werkzeugs wird unten anhand von praktischen Beispielen aus der Hochschulverwaltung vorgestellt.
Geschichte von Kettle
Zeitpunkt |
Was passierte... |
Sommer 2001 |
Der Belgier Matt Casters gründet eigenes Unternehmen als BI-Consultant |
Ab 2003 |
Start der Arbeiten an Kettle. Ursprünglich war geplant, Kettle als KDE-Anwendung zu implementieren, daher der Name KDE Extraction, Transportation, Transformation and Loading Environment. |
2004 |
Kettle Version 1.2 mit SWT statt AWT. Das belgische Verkehrszentrum setzt Kettle ein |
2005 |
Kettle 2.0 wird veröffentlicht, mit Plugin-Architektur und SAP-Plugin. Matt Casters stellt Kettle unter OpenSource-Lizenz. In der ersten Woche hat Kettle 35.000 Downloads |
2006 |
Pentaho wechselt von Octopus zu Kettle, Matt Casters wird angestellt. Kettle wird zu PDI (Pentaho Data Integration) |
2010 |
Kettle / PDI 4.0 Release |
2015 | Pentaho wurde von Hitachi Data Systems aufgekauft. |
2022 | Der Kettle Fork "hop" wird ein Top-Level Produkt der Apache Foundation. |
Wir sehen dass die Software eine "bewegte" Geschichte hat. Durch die ganzen Namensänderungen bleiben wir erstmal beim Namen "kettle". Weitere Details siehe Wikipedia-Eintrag.
Derzeit ist Kettle ein Produkt von Hitachi Vantara.
Alternativen
Eine Übersicht finden Sie auf Wikipedia:
Kommerzielle Produkte im DWH-Bereich:
- IBM InfoSphere
- Informatica
OSS-Tools
- Talend
- PDI / Kettle
- Octopus
Installation und Einrichtung
Voraussetzungen
- Kettle läuft unter Windows und Linux bzw. anderen Systemen mit Java Runtime
- Für Kettle Version 6-8.3 wird Java 8 vorausgesetzt, und zwar nur genau diese Versionen. Ältere Java Versionen und Java 11 werden dort nicht unterstützt.
- Ab Kettle 9.3 wird auch Java 11 und Java 17 unterstützt.
Entgegen der Dokumentation funktioniert auch ein Open Source Java, z.B. openjdk, Sie müssen nicht Oracle Java nehmen. Zur Installation von OpenJDK siehe unsere Java-Installationsanleitung.
Download und Installation
Kettle oder PDI (Pentaho Date Integration) steht in seiner "Community Edition" unter Apache License V.2.0. Das konkrete Programmpaket heißt "pdi-ce-Versionsnr.zip" (Abkürzung für Pentaho Data integration Community Edition).
- Es gibt einen Community Bereich bei Hitachi, wo Sie die Software herunterladen können: https://www.hitachivantara.com/en-us/products/pentaho-platform/data-integration-analytics/pentaho-community-edition.html
- Die Version 8.3 passt zur HISinOne-BI ab Version 2021.06
- Quellcode erhalten Sie auf github: https://github.com/pentaho/pentaho-kettle
Start nach der Installation
Kettle beinhaltet die Anwendung Spoon (graphische Entwicklungsumgebung), sowie die Anwendungen kitchen und pan. Letztere erlauben den scriptgesteuerten Aufruf von Jobs bzw. Transformationen. Die Anwendung carte ermöglicht den Remote-Einsatz von Kettle.
Am besten beginnen Sie mit der graphischen Entwicklungsumgebung "Spoon".
Allgemeines zu Spoon
Das Kommandozeilen-Script "spoon.sh" bzw. "spoon.bat" liegt im obersten Verzeichnis der Auslieferung. Wenn Java 8 oder 17 installiert ist, reicht es die Datei mit Doppelklick zu starten. Aus der Kommandozeile starten Sie mit
spoon.bat /norep
oder
spoon.sh /norep
"/norep" setzt den Parameter, dass Kettle nicht nach einen Repository Server sucht.
Spoon Besonderheiten für Linux
Unter Linux sucht Spoon zunächst nach einer passenden Java-Runtime: entweder Sie setzen die Variable JAVA_HOME / JRE_HOME, oder Sie installieren oberhalb von spoon.sh im Verzeichnis java eine passende runtime. Wenn Sie nur eine spezielle Runtime verwenden wollen, setzen Sie z.B.
PENTAHO_JAVA_HOME=/usr/lib/java export PENTAHO_JAVA_HOME
Wenn sie nach dem Start die Meldung bekommen:
Dann müssen Sie zunächst das Paket libwebkitgtk installieren. Z.B. unter Ubuntu Linux:
apt-get install libwebkitgtk-1.0-0
Danach starten Sie Spoon neu.
Hinweis: Spoon stürzt unter manchen Linux-Versionen ab sobald man auf "Preview" klickt oder eine Transformation starten will.
- Ursache
- vermutlich ist die SWT Bibliothek in Spoon nicht kompatibel mit dem Betriebssystem.
- Lösung
- Besorgen Sie sich eine swt-Datei z.B. aus dem aktuellen Eclipse-Paket. Es liegt im Ordner "plugins", ermittelbar dort mit
ls org.eclipse.swt*jar
Diese Dateien kopiert man ins Spoon Verzeichnis nach
libswt/linux
(jeweils x86 und x86_64), die alten Dateien benennt man um nach swt.old. Danach startet man Spoon neu.
Spoon unter Windows
Unter Windows installieren Sie zunächst Java, und setzen dann in der Systemsteuerung die Umgebungsvariable JAVA_HOME auf den Pfad, wo Java installiert ist, z.B.
C:\Program Files\Java\jre1.8.0_45
Probieren Sie den Start mit Doppelklick auf die Datei spoon.bat. Bei Startproblemen unter Windows öffnen Sie eine DOS-Box ("Eingabeaufforderung") und gehen mit cd in das Verzeichnis, wo Kettle installiert ist (z.B. C:\Users\superx\pdi-ce-7.0.0.0-25\data-integration ). Führen Sie in der DOS Box das Kommando aus:
set JAVA_HOME=C:\Program Files\Java\jre1.8.0_45
Editieren Sie dann die Datei spoon.bat und ersetzen Sie den Aufruf "javaw" durch "java". Achtung: das geht nicht mit Windows Notepad, weil es die Unix Zeilenumbrüche nicht versteht, Sie müssen einen alternativen Editor. z. B. Windows WordPad nehmen und starten Sie das Script
spoondebug.bat
Beantworten Sie alle Fragen mit "Y", am Ende wird eine Datei
SpoonDebug.txt
geschrieben, der Sie diagnostische Meldungen entnehmen können. Wenn z.B. das RAM nicht ausreicht, müssen Sie die Datei spoon.bat editieren, und den Passus "-Xmx2048m" ersetzen z.B. durch "-Xmx1024m". Weitere Hilfen bei Startproblemen siehe den FAQ.
Spoon Einstellungen
Als erstes sollten Sie die Sprachumgebung von Spoon einstellen: Im Menü Tools -> Options wählen Sie im Reiter "UI Settings" die deutsche Umgebung:
Achten Sie darauf, daß Sie bei "Alternative Language" English angeben, damit Menüs, die noch nicht übersetzt sind, in Englisch angezeigt werden.
Kettle und Spoon in der Praxis
Vokabular
Zunächst: Kettle unterscheidet Jobs und Transformationen. Jobs sind Sammlungen von Aktionen in einer definierbaren Reihenfolge, und mit Kettle ausführbar. Transformationen sind die Bausteine von Jobs, und dienen der Datenverarbeitung. Innerhalb von Jobs und Transformationen sind die einzelnen Aktionen sog. "Steps", deren Reihenfolge wiederum durch Verknüpfungen ("hops") organisiert wird.
Jobs und Transformationen werden lokal im XML Format gespeichert, die Endung ist jeweils "*.kjb" fürs Jobs und "*.ktr" für Transformationen.
Hallo Welt
Hallo Welt Design
Unsere Beispiel-Transformation erzeugt 10 Zeilen "Hallo Welt", die am Bildschirm angezeigt werden, sowie als Datei gespeichert werden. Das Beispiel soll die Grundprinzipien von Spoon veranschaulichen.
Starten Sie Spoon, und machen Sie einen Doppelklick auf "Transformations", und wählen Sie unterhalb von "Input" den Schritt "Generate Rows". Ziehen Sie die Zeile in den Entwurfsbereich. Machen Sie dann einen Doppelklick auf das Icon. Danach konfigurieren Sie den Schritt:
Das Icon ändert sich dann im Entwurfsbereich:
Danach ziehen Sie unter "Flow" den Schritt "Dummy" in den Entwurfsbereich. Dann markieren Sie den Schritt "Erzeuge 10 Nachrichten", und halten die Shift-Taste gedrückt. Dann ziehen Sie von dort einen Pfeil zum Dummy-Schritt:
Dann speichern Sie die Transformation mit dem Namen "hallo_welt.ktr" und markieren im linken Menü die Transformation, und drücken die rechte Maustaste. Sie können dann einen Namen und einen Beschreibungstext vergeben:
Dann markieren Sie den Dummy-Step, und klicken Sie auf das Preview Icon:
Es erscheint ein Dialog:
Klicken Sie hier auf "Quick Launch". Es erscheint das Ergebnis:
Hallo Welt Protokollierung
Machen Sie einen Doppelklick auf den Schritt "Erzeuge 10 Nachrichten", und erhöhen Sie das Limit von 10 auf 10.000. Klicken Sie dann auf "OK", und zeigen Sie über das Menü "View"-> "Execution Results" die Ausgabe an. Wählen Sie dann die Registerkarte "Logging". Klicken Sie dann in der Symbolleiste auf das "Run"-Icon:
Wählen Sie bei "Log Level" den "Row level":
Dann klicken Sie unten auf "Launch". Die Transformation wird gestartet, und im Register Logging sehen Sie ein Protokoll:
Neben dem Protokoll können Sie auch eine Ausführungsstatistik aufrufen:
Hallo Welt Dateiausgabe
Speichern Sie obige Transformation als Datei "hallo_welt_dateiausgabe.ktr" und löschen Sie den Dummy-Schritt im Entwurfsbereich. Wählen Sie dann unter Output den Schritt "Text file output", und ziehen Sie den Schritt in den Entwurfsbereich. Danach können Sie den Schritt "Erzeuge 10 Nachrichten" damit verbinden. Machen Sie dann einen Doppelklick auf den Text File Output Schritt, und vergeben Sie den Namen "Hallo Welt Ausgabe".
Bei den Eigenschaften des Schrittes Ausgabe können Sie nun einen Dateinamen angeben. Wählen Sie hier keinen absoluten Pfad, sondern drücken Sie im Feld die Taste STRG-Leerzeichen. Es erscheint eine Auswahlliste, wo Sie den Pfad
${Internal.Transformation.Filename.Directory}
auswählen. Ergänzen Sie dann noch den Dateinamen "hallo_welt":
Hallo Welt in Excel
Für den Export nach Excel erzeugen Sie eine neue Transformation hallo_welt_dateiausgabe_excel.ktr
Die Eigenschaften des Excel Exports sind selbsterklärend.
Hallo Welt als Job
Wählen Sie in Spoon im Menü "New" den Eintrag "Job". Drücken Sie dann CTRL-j, um die Eigenschaften des Jobs zu definieren:
Im Entwurfsbereich ziehen Sie zunächst unter "General" das Icon "Start" herein. Ziehen Sie dann unter "General" das Icon "Transformation" in den Entwurfsbereich, und verbinden Sie beide Schritte:
In den Eigenschaften der Transformation wählen Sie im Feld "Transformation Filename" wieder STRG-Leerzeichen, und wählen die Variable "${Internal.Job.Filename.Directory}" und als Unterverzeichnis den Dateinamen der Transformation:
Sie müssen den Job dann im gleichen Verzeichnis wie die Transformation speichern. Mit dem "Run"-Icon können Sie den Job testen.
Hallo Welt im Batch-Modus
Um den Hallo-Welt-Job über die Kommandozeile aufzurufen, wählen Sie folgenden Befehl:
kitchen.sh /file:<<Absoluter Pfad zu Datei>>hallo_welt.kjb /norep
Damit wird der Job über die Kommandozeile ausgeführt. Der Schalter "norep" bewirkt, daß nicht versucht wird, eine Repository-Datenbank zu nutzen.
Hallo Welt Logging und Fehlerbehandlung
Am Beispiel des HalloWelt-Jobs wollen wir die Fehlerbehandlung erläutern: Jeder Schritt in einem Job kann einen Ausgabe- und einen Fehlerkanal ansteuern. Die Art des Sprungs kann variiert werden. Hier ein Beispiel:
Die Transformation "Hallo Welt Transf." kann einen Fehler enthalten. In diesem Fall wird eine Mail an den Schritt Mail->Mail versendet. Wir nennen diesen Schritt "Fehlermail". Der Schritt hat folgende Einstellungen:
- Im Reiter Addresses und Server geben Sie die Adreßdaten und dem SMTP-Server an.
- Im Reiter "EMail Message" können Sie Inhalt und Betreffzeile spezifizieren:
Wir wählen im Betreff "Kettle mail Fehler". Im Reiter "Attached Files" wählen wir die Logdatei vom Typ "Allgemein":
Man kann bei Dateityp auswählen auch mehrere Zeile markieren. Den normalen Logging-Kanal konfigurieren wir ebenfalls als Mail-Schritt. Dann produzieren wir einen Fehler in der Transformation, z.B. daß die Zieldatei nicht geschrieben werden kann. Wir erhalten folgende mail:
Daten aus Excel-Dokumenten uploaden
Mit Kettle lassen sich elegant Excel-Dateien hochladen und somit beliebige Daten in die Datenbank integrieren. Der Vorteil gegenüber dem CSV-Format ist, dass Sie bspw. Formeln nutzen, weitere Tabenblätter anlegen oder Notizen machen können. Folgend ein kleines Beispiel, um die wichtigsten Schritte zu erläutern:
Der Kettle-Job besteht lediglich aus einem Start- und Success-Step, sowie einer Transformation. Trotzdem benötigen wir einen Job, da nur Jobs im System ausgeführt werden können.
Die Transformation besteht aus einem "Microsoft Excel Input"-Step und einem "Table Output"-Step.
Im "Microsoft Excel Input"-Step ist es wichtig im Reiter Files die Variable ${PATH_TO_UPLOADFILE} anzugeben. Diese muss zuvor dem Job als Parameter bekanntgemacht werden.
Um Parameter zu setzen Doppelklicken Sie im Job auf das freie Feld.
Im Reiter Sheets wird angegeben wie das Tabellenblatt der Excel-Datei heißt, welches die Daten enthält. Zudem wird die Spalte in die Zeile angegeben, ab welcher die Daten erfasst sind. Die Zählung beginnt bei 0, das bedeutet in unserem Beispiel werden die Daten aus dem Tabellenblatt prof_bewertung ab Zelle A4 ausgelesen. Falls Sie eine Kopfzeile nutzen, muss die Kopfzeile in Zelle A4 beginnen.
Im Reiter Content wird angegeben, dass die Excel-Datei eine Kopfzeile besitzt, bevor die hochzuladenden Daten folgen. Dies können Sie nutzen, um Spaltenüberschriften zu setzen.
Im Excel beginnt die Kopzeile in Zelle A4. Darunter folgen die hochzuladenden Daten. Die übrige Exceldatei kann beliebig gestaltet werden.
Im Reiter Fields werden die eingelesenen Felder definiert.
Im "Table-Output"-Step wird die Datenbankverbindung und Zieltabelle angegeben. Zudem erfolgt die Zuordnung der Felder aus dem Kettle-Stream, welche zuvor im "Microsoft Excel Input"-Step im Reiter Fields definiert wurden, zu den Feldern der Datenbanktabelle.
Projekt: Absolvent_innenlisten nach Fachbereich in Excel-Vorlagen schreiben
Das folgende Projekt an der Uni Wuppertal zeigt, wie man auf der Basis von HISinOne eine Absolvent_innenliste für ein bestimmtes Semester erzeugt. Kettle schreibt die Daten dabei in vorhandene Excel-Musterdateien. Diese werden dann nach Excel und PDF exportiert. Um die Schleifenfunktion zu demonstrieren, wird dann diese Liste noch einmal fakultätsweise erzeugt.
Aufbau Gesamtjob Absolvent_innenliste
Mit Semester als Parameter:
Transformation der Absolvent_innen
Hier die gesamte Transformation:
Absolvent_innenliste Selektion der Basisdaten
Wählen Sie einen "Table Input" Step:
Der Parameter ist das Semester. Hier der SQL zum Kopieren:
select C.orgunit_lid as fakultaet_nr, PE.surname as nachname, PE.firstname as vorname, S.registrationnumber as mtknr, C.degree_lid as abschluss_lid, C.subject_lid as studiengang_lid, E.date_of_work as abschlussdatum, N.grade as Gesamtnote, null::decimal as bewertungabschlussarbeit, ::varchar as titelabschlussarbeit, ::varchar as betreuerabschlussarbeit, DP.studysemester as anzahlsemester, ::varchar as anschrift, ::varchar as plz, ::varchar as ort, case when PE.k_gender_id=1 then 'Herr' when PE.k_gender_id=2 then 'Frau' else null::varchar(255) end as Anrede, current_date as heute from hisinone.unit_studies US, hisinone.course_of_study C, hisinone.degree_program_progress DP, hisinone.degree_program D, hisinone.period P, hisinone.student S, hisinone.person PE, hisinone.examplan E, hisinone.term_type T, hisinone.unit U , hisinone.examrelation R left outer join hisinone.examresult N on (N.examrelation_id=R.id) where U.id=US.unit_id and C.lid=US.course_of_study_lid and E.unit_id=U.id and E.default_examrelation_id=R.id and D.id=DP.degree_program_id and DP.course_of_study_id=C.id and DP.period_id=P.id and D.student_id=S.id and PE.id=S.person_id and P.term_type_id=E.term_type_id and P.term_year=E.term_year and S.person_id=E.person_id and T.id=E.term_type_id and U.official_statistics =1 --Hauptprüfung and (to_number(' ' || E.term_year || T.termnumber,'99999') ) = ${Semester} order by 1,2,3;
Absolvent_innenliste Aufbereitung der Daten
Der Name des Abschlusses wird über einen Lookup Step geholt:
Man müßte hier noch weitere Lookups ausführen, z.B. für den Studiengangnamen, oder die Note der Abschlussarbeit. Danach wird die Ergebnisliste um nicht mehr benötigte Felder bereinigt:
Absolvent_innenliste Excel-Export
Im Excel Export wird eine Datei "Absolventenliste.xls" aus der "vorlage.xls" erzeugt:
Dabei werden die Basisdaten am Zelle A9 eingefügt:
Absolvent_innenliste PDF-Erzeugung
Kettle kann selbst kein PDF erzeugen, man kann aber mit OpenOffice bzw. Libreoffice über Kommandozeile PDF generieren. Dazu wählt man im Job den Step "Scripting" → "Shell". Hier das Beispiel für Linux:
Dies erzeugt die Kommandozeile:
/usr/sbin/soffice --headless --convert-to pdf Absolventenliste.xls
Absolvent_innenliste mit Schleife über Fakultäten
Aufbau Gesamtjob Absolventenliste mit Schleife
Der Gesamtjob ermittelt zuerst die Fakultäten, und erzeugt dann in einer Schleife je eine Absolventenliste in Excel. Diese werden dann auf einen Schlag nach PDF exportiert.
Fakultäten / Fachbereiche ermitteln
Die Fakultäten werden aus der Datenbank ermittelt:
Hier der SQL zum Kopieren:
SELECT O.lid as orgunit_lid,O.uniquename as fb_nr,O.defaulttext as fb_name from hisinone.orgunit O, hisinone.k_orgunittype K where K.id=O.k_orgunittype_id and K.hiskey_id=4 and current_date between O.valid_from and O.valid_to order by 2;
Absolvent_innenliste pro Fachbereich generieren
Die Fachbereiche werden zu Parametern kopiert, und die Transformation getAbsolventen wird in einer Schleife über jeden Fachbereich ausgeführt:
Die Transformation bekommt Parameter:
und der "Table Input"-Step wertet diesen aus:
Absolvent_innenliste Excel Export pro Fachbereich
Der Dateiname der Excel-Datei enthält jetzt auch den Fachbereichsschlüssel:
Die Fakultätsnummer wird im ersten Excel-Writer geschrieben:
Dann die Absolvent_innenliste. Die Transformation darf aber nicht gleichzeitig in die Excel-Datei schreiben. Dazu wird ein "Block until steps finish"-Step eingerichtet:
Der zweite Excel Writer ergänzt dann nur noch die Absolvent_innenliste:
PDF-Export pro Fakultäten
Da keine Wildcards unterstützt werden, müssen wir ein Shellscript erzeugen, z.B. für Linux:
Hier der Inhalt des Shellscriptes createpdf.x:
#!/bin/bash soffice --headless --convert-to pdf A*.xls
Das Ergebnis
Im Ergebnis erhalten wir eine Dateiliste mit n Absolvent_innenlisten jeweils in Excel und PDF:
Hier eine Vorschau in Excel:
und hier in PDF: