Da die Abende derzeit schön lang und auch wieder wärmer sind, bereite ich mich aktuell auf den Blankeneser Heldenlauf vor. Diesen Halbmarathon durch das Treppenviertel habe ich meinen Kollegen zu verdanken. Sind sie nicht nett ?! :-)
Um das Wochenpensum von 70km zu erreichen, werden viele Runden um den Bramfelder See nötig sein. Dort ist es ab 20 Uhr übrigens fantastisch ruhig. Im Vergleich zur Außenalster ist es wie autofreier Sonntag statt Rush Hour.

Zwischen den Läufen habe ich dennoch etwas Zeit gefunden, durch´s Netz zu stöbern. Dabei ist mir die Seite von Matt Casters aufgefallen. Matt ist ein Business Intelligence Consultant mit Fokus auf der Open Source Software Penthao Data Integration. Mit dieser Lösung arbeite ich ebenfalls sehr gerne. Sogar ein kleines Tutorial hatte ich bereits verfasst, auf das ich an dieser Stelle kurz hinweisen möchte.

Der weltweit größte Datenbankhersteller Oracle übernahm am 20.04.2009 die Firma Sun, ebenfalls ein Big-Player im IT-Geschäft. Suns Portfolio umfasste neben Serverhardware auch einige Softwareperlen, hauptsächlich im Open-Source Bereich. Darunter die etablierte Programmiersprache Java und die populäre Office-Suite OpenOffice.org.

Highlight der Übernahme ist jedoch das freie Datenbanksystem MySQL.

Somit holt sich Oracle auf einen Schlag die eigene Konkurrenz ins Haus. Der Medienaufschrei ist groß, denn schließlich zählt MySQL zu den am meisten eingesetzten Lösungen im Internetumfeld. Größen wie Facebook, Google und unzählige Blogs nutzen MySQL zur Datenspeicherung.

Ich möchte 3 Szenarien vorstellen, die die Zukunft für MySQL bringen könnte.

1. MySQL wird in das Portfolio von Oracle integriert

Derzeit kommuniziert Oracle diese Strategie und verspricht, MySQL weiterhin als quelloffene Software zu pflegen. Wenn man sich die Zielgruppen ansieht, gibt es auf den ersten Blick auch keinen Interessenkonflikt. Oracle zielt auf den Enterprisebereich mit Advanced-Features wie Clustering und Grid, Data-Warehouse Funktionen oder einem Heer an Administrationsmöglichkeiten ab.
MySQL wird überwiegend im kleinen und mittleren Segment und in Internetprojekten eingesetzt, wo es auf eine kostengünstige Datenspeicherung ankommt. Somit existieren zwei überschneidungsfreie Zielgruppen nebeneinander.

Ein genauerer Blick zeigt jedoch, dass sich MySQL seit Jahren kontinuierlich entwickelt und stetig neue Funkionen implementiert. Hier sind beispielsweise neue Speicherengines wie Falcon zu nennen oder Funktionen wie Partitionierung oder Stored Procedures.
Oracle hingegen versucht mit einer Express-Edition (Oracle XE) ebenfalls im unteren Segment mitzuspielen. Genau hier entsteht der Konflikt. Zwei Produkte mit ursprünglich anderem Ansatz treffen sich in der Mitte. Hinzu kommt, dass beide Lösungen (MySQL und Oracle XE) kostenfrei erhältlich sind, also ohne Lizenzkosten betrieben werden dürfen. Somit stellt sich die Frage, warum Oracle zwei Produkte ohne monetären Nutzen im Portfolio halten sollte?

Eine Option wäre, dass Oracle dies aus Image gründen machen könnte, um sich als “Open-Source-freundlich” zu zeigen. Ich finde es jedoch zweifelhaft, dass Larry Ellison (CEO von Oracle) hier großen Wert drauf legt und dies nötig hat.

2. MySQL wird langsam sterben gelassen

Bei dieser Variante wird Oracle mittel- oder langfristig die Implementierung neuer Funktionen und die Softwarepflege auslaufen lassen. Anwender werden sich nach anderen Alternativen umschauen, die es durchaus gibt.

Beispielsweise PostgreSQL. PostgreSQL ist seit 1997 als Open Source am Markt und erfreut sich steigender Beliebtheit. Für die meisten einfacheren Anwendungen reicht PostgresSQL meiner Meinung nach völlig aus, da es elementare Funktionen wie Transaktionssicherheit, Sicherstellen der Datenintegrität durch Constraints und Views bietet. Es bietet auch Schnittstellen zu alle wichtigen Programmiersprachen und eine aktive Community.
PostgresSQL hat gegenüber MySQL sogar den Vorteil, das es als objektrelationales Datenbanksystem konzipiert wurde. Damit ist es der objektorientierten Programmierung prinzipiell näher, als rein relationale Datenbanksysteme.

Möglicherweise überholt PostgresSQL nach und nach MySQL in der Bedeutung, bis es für MySQL keine wirkliche Daseinsberechtigung gibt.
Aus wirtschaftlicher Betrachtung halte ich diese Lösung für sinnvoller, als die Erste.

3. MySQL wird komplett freigeben

In diesem Szenario würde Oracle die Rechte an MySQL komplett freigeben und somit eine 100%ige Weiterentwicklung durch Dritte ermöglichen. Oracle hat hierbei keine Einflussmöglichkeiten, und somit keine Kontrolle mehr, über das Produkt.

Aus Sicht von Oracle besteht nun die Gefahr, dass MySQL stärker zur Konkurrenz für die eigenen Datenbanksysteme wird, als es heute der Fall ist. Da Larry nicht doof ist, wird er diese Option am unwahrscheinlichsten wählen.

Es wird also spannend, welche Karte Oracle zieht. Möglicherweise wird es auch ein Joker sein, eine Variante, mit der bisher niemand rechnet. Wir werden es sehen.

Pentaho Data Integration



Das auch als Kettle bekannte Pentaho Data Integration (PDI) [1] ist ein Programm zum Laden, Transformieren und Speichern von Daten. Üblicherweise werden ETL-Tools (Extraction, Transform, Load [2]) im
Datenbankbereich eingesetzt, wenn große Datenmengen zwischen
verschiedenen Quell- und Zielformaten konvertiert werden. Neben einmaligen Transformationen in Migrationsprojekten [3] sind auch periodische Transaktionen für die Datenübertragung von einer Anwendung in eine andere üblich.

Neben diversen kommerziellen Programmen stellt die Firma Pentaho eine Open-Source-Lösung namens Pentaho Data Integration bereit. Anhand eines konkreten Anwendungsfalls wird ein Einblick in den Leistungsumfang und die Vorgehensweise gegeben.

Der Anwendungsfall

Als beispielhaftes Szenario wurde die Migration einer Kundendatei mit Adressdaten gewählt. Die Quelldaten liegen in Form von kommaseparierten Werten (CSV) in einer Datei vor. Diese könnte aus einer Microsoft-Excel- oder OpenOffice.org-Calc-Anwendung heraus erstellt worden sein, welche vorher als Kundendatei gedient hat. Die Daten sollen in ein neues Unternehmens-CRM [4] geladen werden. Als Zielsystem wurde SugarCRM gewählt – eine Open-Source-Lösung, welche auch in freiesMagazin 07/2009 vorgestellt wurde [5].

Technische Beschreibung

Die Adressdaten in SugarCRM werden in einer MySQL-Datenbank [6] gespeichert.
Die relevanten Tabellen heißen

  • contacts
  • email_addresses
  • email_addr_bean_rel

Die folgende Tabelle zeigt die Felder der CSV-Datei und die entsprechenden Zielspalten in der Datenbank:

Datenbanklayout
Feld in CSV-Datei Zieltabelle Zielspalte
Name contacts first_name
contacts last_name
Street contacts primary_address_street
Zipcode contacts primary_address_postalcode
City contacts primary_address_city
Phone contacts phone_work
Fax contacts phone_fax
Email email_addresses email_address
email_addresses email_address_caps

Vor- und Zuname stehen in der CSV-Datei mit Leerzeichen getrennt in nur einem Feld. Diese müssen anhand des Leerzeichens getrennt und separat gespeichert werden. Die E-Mailadresse steht in einer eigenen Tabelle, die neben der Adresse selbst diese auch in Großbuchstaben enthält (email_address_caps). Eine Zuordnung zwischen den Kontaktdaten (Tabelle contacts) und den E-Mail-Adressen (Tabelle email_addresses) findet über die Tabelle email_addr_bean_rel statt.

Mit PDI ist daher folgender Ablauf zu erstellen:

  1. Einlesen der CSV-Datei
  2. Aufteilung des Namens in Vor- und Zuname
  3. E-Mailadresse zusätzlich in Großbuchstaben konvertieren
  4. Entsprechende Daten in den drei genannten Tabellen speichern

Die Arbeitsfläche

Um diesen Ablauf zu erstellen, bietet PDI eine Arbeitsfläche (Workspace), auf der diverse Prozessschritte grafisch per Drag-and-Drop arrangiert werden können. Die Prozessschritte stehen als Icons in einer Werkzeugleiste zur Verfügung. Diese sind logisch in Aufgabenbereiche gegliedert, darunter unter anderen „Input“ für Ladevorgänge, „Output“ für Ausgabeformate oder „Transform“ für Datentransformationen.

Darstellung der Werkzeugleiste.

Einlesen der Daten

Um die CSV-Datei einzulesen, wird das Icon „CSV-Input“ verwendet. Dieses wird auf die Arbeitsfläche gezogen und anschließend mit einem Doppelklick geöffnet. Im nun erscheinenden Dialog werden Einstellungen wie der Dateiname, das Trennzeichen der CSV sowie die einzelnen Feldnamen und Datentypen angegeben.

Einstellungsdialog zum Laden der CSV-Datei.

Als nächstes müssen Vor- und Zuname, welche in der CSV-Datei in einem Feld vorkommen, in zwei Felder aufgetrennt werden. Dazu dient das Icon „Split Fields“. In dessen Dialog muss das Feld, welches getrennt werden soll, angegeben werden. Auch muss das Zeichen, welches als Trennkriterium dient, definiert werden – in diesem Beispiel das Leerzeichen. Zusätzlich muss angegeben werden, wie die beiden neuen Felder heißen, die das linke und das rechte Ergebnis der Trennung symbolisieren.

Dialog zum Trennen von Vor- und Zuname.

Den Datenfluss zwischen den Icons repräsentieren sogenannte „Hops“. Dieses werden durch gerichtete Pfeile dargestellt. Um zwei Icons mit einem Hop zu verbinden, müssen diese markiert werden. Durch einen Rechtsklick und die Wahl „New Hop“ werden die beiden Icons mit einem Pfeil verbunden.

Datenfluss zwischen zwei Icons.

Erzeugen von Primärschlüsseln

Nachdem die CSV-Datei eingelesen und Vor- und Zuname in zwei neue Felder getrennt sind, muss noch eine ID (Primärschlüssel in der Datenbank [7]) generiert werden. Hierzu gibt es das Icon „Generate Random Value“, welches auf Universally Unique Identifier (UUID) eingestellt wird. Somit werden IDs erzeugt, die syntaktisch den bereits verwendeten SugarCRM-IDs in der MySQL-Datenbank entsprechen. Andere IDs würden hier auch funktionieren.

Befüllen der erste Zieltabelle mit Kontaktdaten

Nun könnte die Tabelle contacts bereits gefüllt werden. Allerdings erwartet ein „Output Icon“, dass alle gelieferten Felder gespeichert werden. Daher muss die E-Mailadresse noch herausgefiltert werden, denn diese wird nicht in contacts gespeichert.

Zum Löschen von Feldern im Datenstrom bietet sich das Icon „Select Values“ an. Dort kann unter anderem angegeben werden, welche Felder aus dem Strom entfernt werden sollen. Anschließend werden die Daten an das „Output Table Icon“ übergeben.

Entfernen der E-Mail-Adresse aus dem Datenstrom.

Im „Output Table Icon“ wird über eine definierte JDBC-Verbindung [8] die MySQL-Datenbank angesprochen. Es wird die Zieltabelle contacts angegeben, sowie unter dem Reiter „Database fields“ definiert, welches Feld aus dem Datenstrom in welche Tabellenspalte geschrieben werden soll. Diese Zuordnung wird als Mapping bezeichnet.

Einstellungsdialog zum Speichern der Kontaktdaten.

Tabelle mit E-Mailadressen

Nun müssen die E-Mailadressen in Großbuchstaben konvertiert und anschließend in der Tabelle email_addresses gespeichert werden. Dazu wird der Datenstrom vom ersten abgezweigt (ein Icon kann zwei Hops gleichzeitig bedienen). Der Datenstrom wird dann an beide Hops kopiert. Aus dem aktuellen Strom müssen alle Felder, bis auf die E-Mailadresse, herausgefiltert werden, denn nur diese soll in der Tabelle gespeichert werden.

Zum Großschreiben der E-Mailadresse wurde das Icon „Formula“ genutzt. Dieses bietet diverse mathematische und logische Operationen. Mit der „upper“-Funktion von „Formula“ können Zeichen in Großbuchstaben konvertiert werden.

Um die Daten nun in die Tabelle email_addresses zu schreiben, wird ein weiteres „Table Output Icon“ verwendet. Allerdings wird auch hier ein Primärschlüssel benötigt, welcher im Vorfeld wieder über das Icon „Generate Random Value“ erzeugt werden muss.

Zuordnung zwischen Kontakt und E-Mail-Adresse

Die dritte Tabelle email_addr_bean_rel beinhaltet die Zuordnung zwischen contacts und email_addresses. Es müssen daher die beiden
erzeugten Primärschlüssel gespeichert werden. Aus diesem Grund wurde der Datenstrom jeweils von „Generate Random Value“ abgezweigt, damit die erzeugte ID mit übernommen und weiter verwendet werden kann.

Als letzte Schwierigkeit erweist sich die Spalte beani_module in der Tabelle. Diese beinhaltet eine Konstante, die angibt, um welchen Verbindungstyp (hier contacts) es sich handelt. Auch hierfür wurde die „Formula“-Funktion genutzt. Als Funktion wird der Wert der Konstante in Hochkommata angegeben.

Der fertige ETL-Prozess auf dem PDI-Workspace.

Zusammenfassung

Mit PDI ist es nach kurzer Einarbeitung möglich, Datentransformationen zu erzeugen. Dabei ist keine Programmierung notwendig, da alle Teilschritte grafisch modelliert werden können. Dies ermöglicht gegenüber einer eigenen Programmierung eine schnellere und standardisiertere Entwicklung. Abgerundet wird die Entwicklungsoberfläche mit einem Job-Monitor, mit dessen Hilfe periodische Transformationen umgesetzt werden können. Eine hilfreiche Community steht bei Fragen über ein Forum und Wiki zu
Verfügung [9].

Die CSV-Datei wurde mit Hilfe von GenerateData [10] erzeugt und kann mitsamt dem PDI-Mapping heruntergeladen werden:

Links

  1. http://kettle.pentaho.org/
  2. http://de.wikipedia.org/wiki/ETL-Prozess
  3. http://de.wikipedia.org/wiki/Migration_(Informationstechnik)
  4. http://de.wikipedia.org/wiki/Customer-Relationship-Management
  5. http://www.freiesmagazin.de/freiesMagazin-2009-07
  6. http://de.wikipedia.org/wiki/Mysql
  7. http://de.wikipedia.org/wiki/Primärschlüssel
  8. http://de.wikipedia.org/wiki/JDBC
  9. http://forums.pentaho.org/
  10. http://www.generatedata.com/

Die Abende werden dunkler und kühler, das Laub fällt langsam von den Bäumen und der Wetterbericht zeigt keine orangeroten Farbverläufe der Temperaturen mehr - es wird eindeutig Herbst. Damit sind auch die ausgiebigen Läufe entlang des Müggelsee oder der Alster passé.

Zum Abschluss habe ich wieder einmal an den StienitzseeOpen, sowie erstmalig am Stadtlauf Leipzig teilgenommen. Durch eine gute Vorbereitung konnte ich ganz passable Zeiten laufen. Ich habe beide Veranstaltungen einfach mal verglichen:

Kriterium Stienitzsee Leipzig
Distanz 12 km - gefühlt 10 km 10 km - gefühlt 15 km
Gelaufene Zeit 1:04 Stunde 53 Minuten
Teilnehmer Gefühlt 200 Gefühlt 3000
Startgeld 10€ 24€ inkl. Shirt
Organisation Weltklasse! Shuttle-Service, Duschen, Rahmenprogramm, Wasser- und Obstversorgung, es gibt im Ziel eine Medaille Note 3-, habe keine Duschen gefunden, WC´s ständig überfüllt, Massenandrang an den Wasserständen, ansonsten so wie erwartet
Ambiente der Strecke 1+, schöne Landschaft, ideenreiche Aktionen entlang der Strecke 2-, halt rund um den Clara-Zetkin-Park - nichts Besonderes, aber auch nicht schlecht, etwas verwirrendes Ziel (separat vom Startbogen)
Wetter Erst regnerisch, dann bewölkt und im Ziel Sonne Erst regnerisch, dann bewölkt und im Ziel immer noch bewölkt
Nächstes Jahr dabei Na logisch! Mal sehen. Vielleicht auch Berlin oder aber Nachtlauf Hannover.

Vielen Dank an die jeweiligen Organisatoren für zwei wirklich schöne Events!

Da heute der 1. Sonntag im Monat ist, ist soeben die neue Ausgabe von freiesMagazin erschienen. Die Top-Themen der Juni-Ausgabe sind:

  • ZevenOS - Linux goes BeOS
  • easyVDR - The easy VDR Distribution
  • Was bieten freie CRM-Lösungen? - Im Vergleich: SugarCRM und vtiger CRM

Die HTML-Ausgabe ist hier zu lesen. Die PDF-Version gibt es hier. Viel Spaß beim Lesen!

Kategorien