© marivlada/Shutterstock.com, © S&S Media
Teil 2: Integration verschiedener Datentypen

Neues von Farin und Co.


Nachdem Sie im vorherigen Teil dieser Serie Neo4j und einige sanfte Grundlagen der Graphentheorie kennen gelernt haben, möchte ich Ihnen im zweiten Teil zeigen, wie Sie Neo4j mit Daten befüllen können. Bestands- und Bewegungsdaten entstehen in der Regel durch die Benutzung von Anwendungen, die mit einer Datenbank interagieren. Stammdaten werden jedoch oftmals initial geladen, aggregiert oder in anderer Art und Weise angereichert. Neo4j bietet – mit oder ohne externe Werkzeuge – eine Vielzahl von Möglichkeiten, Daten zu laden und als Graph zu speichern.

Die Abschnitte zum Laden von Daten aus relationalen Datenbanken sind natürlich nur relevant, wenn Sie bereits eine relationale Datenbank mit relevanten Daten in Betrieb haben. Ist das nicht der Fall und möchten Sie einfach nur die Beispiele ausprobieren, können Sie zum Beispiel meine PostgreSQL-Datenbank mit musikalischen Statistiken aus bootiful-music [1] oder aber auch die Sakila Sample Database [2] testen. Ich habe in den Repositories meines Spring-Boot-Buchs [3] eine PostgreSQL-Variante [4]. Weitere Ports finden Sie zum Beispiel auf den jOOQ-Seiten der Data Geekery: The Sakila Database [5].

Einfache Migration von relationalen Datenbanken mit Neo4j-ETL

Im ersten Teil dieser Serie haben Sie bereits die Neo4j-Desktop-Distribution kennen gelernt. Über die Desktopoberfläche können Sie das Neo4j-ETL-Werkzeug installieren. ETL steht für Extract, Transform and Load [6]. Neo4j-ETL kann über standardkonforme JDBC-Treiber mit vielen relationalen Datenbanken interagieren und Daten extrahieren. Wechseln Sie über die Schaltfläche Graph Applications zu den installierten Anwendungen für Graphen (Abb. 1).

simons_neo4j_2_1.tif_fmt1.jpgAbb. 1: Neo4j-ETL-Werkzeug installieren

Tragen Sie im Feld Install Graph Application den URL r.neo4j.com/neo4j-etl-app [7] ein, um das Neo4j-ETL-Werkzeug zu installieren. Über die Schaltfläche Add Application fügen Sie das Werkzeug anschließend Ihrem Projekt hinzu. Starten Sie nun die Datenbank und anschließend das ETL-Werkzeug (Abb. 2).

simons_neo4j_2_2.tif_fmt1.jpgAbb. 2: Neo4j-ETL-Werkzeug

Über die Schaltfläche Add connection konfigurieren Sie die Verbindung zur relationalen Datenbank. Der Graph des Projekts ist bereits vorab ausgewählt.

Neo4j liefert zusammen mit dem ETL-Werkzeug die JDBC-Treiber einiger bekannter Datenbanken mit aus (Abb. 3). Im Beispiel habe ich der Einfachheit halber den PostgreSQL-Treiber genutzt. Über den Typ jdbc haben Sie die Möglichkeit, eigene JAR-Dateien mit dem passenden Treiber anzugeben. Oracles JDBC-Treiber ist beispielsweise einer der Kandidaten.

simons_neo4j_2_3.tif_fmt1.jpgAbb. 3: Konfiguration von Neo4j-ETL

Nach erfolgreichem Test der Verbindung können Sie mit der Erstellung der Abbildungsregeln fortfahren.

simons_neo4j_2_4.tif_fmt1.jpgAbb. 4: Initiale Abbildungsregeln

Nach einiger Zeit sehen Sie – in Abhängigkeit von Ihrem Datenbankschema – eine Darstellung wie in Abbildung 4. Ich habe hier das Schema meiner Musikdatenbank benutzt.

Das ETL-Werkzeug geht recht einfach vor: Aus jeder Tabelle wird ein Label definiert, und zwar im Singular. Während in relationalen Datenbanken Tabellen in der Regel im Plural bezeichnet werden sollten, da sie mehrere Elemente der gleichen Relation enthalten, ist es üblich, Labels in einem Property-Graphen im Singular zu vergeben. Das ETL-Tool versucht automatisch, dieses Verhalten zu berücksichtigen.

Während ich im Beispiel mit dem ersten Vorschlag für die Labels der zu erstellenden Knoten zufrieden bin und nur den Import meiner Flyway-Schema-Tabelle [8] abwähle, möchte ich die zu erstellenden Relationen ein wenig nachbessern (Abb. 5).

simons_neo4j_2_5.tif_fmt1.jpgAbb. 5: Nachgebesserte Relationships

Das ETL-Werkzeug leitet die Beziehungen aus den Foreign Keys ab, die hoffentlich in Ihrer relationalen Datenbank bestehen. Den Namen der Beziehung können Sie ändern, die Richtung leider nicht. Im Beispiel hätte ich gerne die Beziehung zwischen Track und Play in umgekehrter Richtung.

Wenn Sie mit Ihrem Mapping zufrieden sind, speichern Sie bitte die Regel und drücken Next. Anschließend können Sie ihren Graphen mit einem Online- oder Bulk-Import befüllen. Solange Sie nicht Daten in dreistelligen Gigabytebereichen hin- und herschieben, sollte der Import nach einiger Zeit erfolgreich abgeschlossen sein. Eine Suche nach allen Titeln, die ich jemals von den Ärzten gehört habe, liefert dann ein Ergebnis (Abb. 6).

simons_neo4j_2_6.tif_fmt1.jpgAbb. 6: Einfaches Mappingergebnis

An dieser Stelle gibt es nun mehrere Möglichkeiten. Sie sind zufrieden mit Ihrem Graphen und arbeiten mit der Struktur, wie sie ist. Oder Sie können die erstellten Nodes, Relationships und deren Properties als Ausgangsbasis nehmen, um Sie mit Ihren Cypher-Kenntnissen aus dem ersten Artikel weiter zu verfeinern. Die dritte Alternative bedeutet nochmal einen Schritt zurück auf Start – und den möchte ich mit Ihnen gehen.

Import nahezu beliebiger Datenquellen

Im Handbuch finden Sie den in der Datenbank eingebauten Befehl LOAD CSV [9]. Als ich angefangen habe, mit Neo4j zu arbeiten und noch wenig Erfahrung mit Cypher und seinen Möglichkeiten hatte, war ich wenig enthusiastisch, was denn großartig beim Laden einer CSV-Datei herumkommen soll. In der Vergangenheit hatte ich die Erfahrung gemacht, dass viele Importwerkzeuge relationaler Datenbanken eben auch nur eine Tabelle pro Datei naiv mit den Zeilen der Datei auffüllen.

Sie werden jedoch hoffentlich genau wie ich feststellen, dass LOAD CSV aus einigen Gründen sehr mächtig ist. Es kann Dateien aus dem lokalen Dateisystem, aber auch von URLs lesen. Entweder kann es Strukturen eins zu eins abbilden, oder aber – da es direkt im Kontext der Cypher-Engine läuft – beliebige Transformationen durchführen. * LOAD...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang