Eksport danych z Neo4j

Jak pobrać dane z grafowej bazy danych Neo4j

W artykule "Ładowanie danych do Neo4j" opisane były metody ładowania danych do Neo4j. Teraz zajmiemy się tematyką pobierania danych z bazy. Możemy dokonać eksportu zawartości bazy na kilka sposobów w zależności jaki ma być format danych i czy dane będą pobierane automatycznie czy ręcznie.

Pobieranie danych bezpośrednio z przeglądarki

Możesz dokonać eksportu danych bezpośrednio z okna przeglądarki (webowy interfejs do bazy Neo4j). Po wykonaniu zapytania Cypher kliknij ikonę eksportu po prawej stronie okna zapytań. Możesz wybrać jeden z kilku formatów. CSV czy JSON utworzy plik tekstowy który dalej możesz przetworzyć w innych narzędziach. PNG czy SVG będzie potrzebny kiedy bedziesz chciał(a) przedstawić dane np. w prezentacji.

Eksport zawartości grafowej bazy danych do pliku CSV

Domyślnie eksportowanie do systemu plików jest wyłączone. Możemy to włączyć, ustawiając następującą właściwość w neo4j.conf:

apoc.export.file.enabled=true

Jeśli spróbujemy użyć dowolnej procedury eksportu bez wcześniejszego ustawienia tej właściwości, otrzymamy następujący komunikat o błędzie:

Failed to invoke procedure: Caused by: java.lang.RuntimeException: Export to files not enabled, please set apoc.export.file.enabled=true in your neo4j.conf

Pliki eksportu są zapisywane w katalogu importu, który jest zdefiniowany we właściwości dbms.directories.import. Oznacza to, że każda podawana przez nas ścieżka pliku jest względna do tego katalogu. Jeśli spróbujemy pisać w ścieżce bezwzględnej, takiej jak /tmp/filename, otrzymamy komunikat o błędzie podobny do następującego:

Failed to invoke procedure: Caused by: java.io.FileNotFoundException: /path/to/neo4j/import/tmp/fileName (No such file or directory)

Możemy włączyć zapis do dowolnego miejsca w systemie plików, ustawiając następującą właściwość w neo4j.conf:

apoc.import.file.use_neo4j_config=false

Eksportuj całą bazę danych do CSV

Procedura apoc.export.csv.all eksportuje całą bazę danych do pliku CSV lub jako strumień. Przykład:

CALL apoc.export.csv.all("movies.csv", {})

Przykład eksportu części danych:

MATCH (person:Person)-[actedIn:ACTED_IN]->(movie:Movie)
WITH collect(DISTINCT person) AS people, collect(DISTINCT movie) AS movies, collect(actedIn) AS actedInRels
CALL apoc.export.csv.data(people + movies, actedInRels, "movies-actedIn.csv", {})
YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data
RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data

Eksport zawartości grafowej bazy danych do pliku JSON

Eksportuj całą bazę danych do JSON

Procedura apoc.export.json.all eksportuje całą bazę danych do pliku JSON lub jako strumień.

CALL apoc.export.json.all("all.json",{useTypes:true})

Eksportuj wybrane węzły i relacje do JSON

Eksport wybranych węzłów i relacji do pliku JSON:

MATCH (nod:User)
MATCH ()-[rels:KNOWS]->()
WITH collect(nod) as a, collect(rels) as b
CALL apoc.export.json.data(a, b, "knows.json", null)
YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data
RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data

ETL - atuomatyczne lub ręczne pobieranie danych

Wkorzystaj ETL by eksportować dane z bazy Neo4j. Za pomocą Pentaho Kettle i odpowiedniego pluginu możesz zbudować transformację która połączy się z bazą i pobierze określone dane. Transformację Pentaho możesz uruchamiać ręcznie, odwoływać sie do niej poprzez REST (Carte server) lub ustawić cykliczne jej wykonywanie w systemie.

HTTP API

Mniejszą ilość danych możesz pobrać łącząc się z natywnym HTTP API bazy Neo4j. Ten typ połączenia wykorzystują inne systemy które zapisują do Neo4j lub odczytują dane z Neo4j. Szczegóły HTPP API opisano na tej stronie.