Zuletzt bearbeitet vor einem Jahr
von Imo John

Kettle-Grundlagen

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:

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).

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:

kettle libwebkit.png

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:

Einstellungen

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:

Erzeugung eines Step

Das Icon ändert sich dann im Entwurfsbereich:

Erzeugung eines Step

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:

Erzeugung eines Step

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:

Erzeugung eines Step

Dann markieren Sie den Dummy-Step, und klicken Sie auf das Preview Icon:

Werkzeuge in einer Transformation

Es erscheint ein Dialog:

Erzeugung eines Step

Klicken Sie hier auf "Quick Launch". Es erscheint das Ergebnis:

Vorschau des Step

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:

Werkzeuge in einer Transformation

Wählen Sie bei "Log Level" den "Row level":

Werkzeuge in einer Transformation

Dann klicken Sie unten auf "Launch". Die Transformation wird gestartet, und im Register Logging sehen Sie ein Protokoll:

Werkzeuge in einer Transformation

Neben dem Protokoll können Sie auch eine Ausführungsstatistik aufrufen:

Werkzeuge in einer Transformation

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".

Werkzeuge in einer Transformation

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":

Werkzeuge in einer Transformation

Hallo Welt in Excel

Für den Export nach Excel erzeugen Sie eine neue Transformation hallo_welt_dateiausgabe_excel.ktr

Dateiausgabe nach Excel

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:

Jobs erstellen

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:

Jobs erstellen

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:

Jobs erstellen

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:

Fehlermail

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:

Fehlermail

Wir wählen im Betreff "Kettle mail Fehler". Im Reiter "Attached Files" wählen wir die Logdatei vom Typ "Allgemein":

Fehlermail

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:

Fehlermail

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.

Einstellungen

Die Transformation besteht aus einem "Microsoft Excel Input"-Step und einem "Table Output"-Step.

Einstellungen

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.

Einstellungen

Um Parameter zu setzen Doppelklicken Sie im Job auf das freie Feld.

Einstellungen

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.

Einstellungen

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.

Einstellungen

Im Excel beginnt die Kopzeile in Zelle A4. Darunter folgen die hochzuladenden Daten. Die übrige Exceldatei kann beliebig gestaltet werden.

Einstellungen

Im Reiter Fields werden die eingelesenen Felder definiert.

Einstellungen

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.

Einstellungen

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

Gesamtjob

Mit Semester als Parameter:

Gesamtjob Parameter

Transformation der Absolvent_innen

Hier die gesamte Transformation:

Absolv. Transformation

Absolvent_innenliste Selektion der Basisdaten

Wählen Sie einen "Table Input" Step:

Absolv. Transformation Table input

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:

Absolv. Transformation Lookup


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:

Ergebnisliste

Absolvent_innenliste Excel-Export

Im Excel Export wird eine Datei "Absolventenliste.xls" aus der "vorlage.xls" erzeugt:

Ergebnisliste

Dabei werden die Basisdaten am Zelle A9 eingefügt:

Ergebnisliste


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:

Ergebnisliste in PDF

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.

Ergebnisliste als Schleife

Fakultäten / Fachbereiche ermitteln

Die Fakultäten werden aus der Datenbank ermittelt:

Fakultäten für die Schleife

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:

Fakultäten für die Schleife 2

Die Transformation bekommt Parameter:

Fakultäten für die Schleife 3

und der "Table Input"-Step wertet diesen aus:

Fakultäten für die Schleife 4

Absolvent_innenliste Excel Export pro Fachbereich

Der Dateiname der Excel-Datei enthält jetzt auch den Fachbereichsschlüssel:

Fakultäten für die Schleife in Excel 1

Die Fakultätsnummer wird im ersten Excel-Writer geschrieben:

Fakultäten für die Schleife in Excel 2

Dann die Absolvent_innenliste. Die Transformation darf aber nicht gleichzeitig in die Excel-Datei schreiben. Dazu wird ein "Block until steps finish"-Step eingerichtet:

Fakultäten für die Schleife in Excel 3

Der zweite Excel Writer ergänzt dann nur noch die Absolvent_innenliste:

Fakultäten für die Schleife in Excel 4

PDF-Export pro Fakultäten

Da keine Wildcards unterstützt werden, müssen wir ein Shellscript erzeugen, z.B. für Linux:

Fakultäten für die Schleife in Excel 5

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:

Fakultäten für die Schleife in Excel 6

Hier eine Vorschau in Excel:

Fakultäten für die Schleife in Excel 7

und hier in PDF:

Fakultäten für die Schleife in Excel 8