Importing & Exporting Data-2

 

📤 Exporting Data from Neo4j

1. Export to CSV

You can export query results as CSV.

Example

MATCH (u:User)-[:WORKS_ON]->(p:Project) RETURN u.name AS user, p.title AS project

👉 In Neo4j Browser, you can click “Download CSV”.

Or in Cypher Shell:

cypher-shell -u neo4j -p password \ "CALL apoc.export.csv.query( 'MATCH (u:User)-[:WORKS_ON]->(p:Project) RETURN u.name, p.title', 'export.csv', {} )"

📄 export.csv

u.name,p.title Alice,Graph DB Alice,AI System Bob,Graph DB

2. Export to JSON

JSON is handy for APIs or app integration.

Using APOC plugin:

CALL apoc.export.json.query( "MATCH (u:User)-[:WORKS_ON]->(p:Project) RETURN u.name, p.title", "export.json", {} )

📄 export.json

[ {"u.name":"Alice", "p.title":"Graph DB"}, {"u.name":"Alice", "p.title":"AI System"}, {"u.name":"Bob", "p.title":"Graph DB"} ]

3. Exporting Whole Database

  • CSV:

    CALL apoc.export.csv.all("alldata.csv", {})
  • JSON:

    CALL apoc.export.json.all("alldata.json", {})

4. Other Options

  • apoc.export.cypher.* → export Cypher scripts (for re-import).

  • apoc.export.graphml.* → export GraphML (XML format).

  • In Neo4j Bloom or Browser, you can visually download query results as CSV.


Summary

  • For small queries → just RETURN and download.

  • For full database or structured exports → use APOC export functions.

  • Choose CSV for spreadsheets/SQL imports, JSON for APIs/web apps.

APOC (Awesome Procedures On Cypher) is like a Swiss army knife for Neo4j 🛠️.
When it comes to ETL (Extract, Transform, Load), APOC is the go-to extension for importing, transforming, and exporting data.


⚡ APOC for ETL in Neo4j

1. Extract (Getting data in)

APOC provides procedures to read data from external sources (CSV, JSON, XML, databases, APIs).

Examples

  • From CSV

CALL apoc.load.csv("file:///users.csv") YIELD map RETURN map;
  • From JSON (API or file)

CALL apoc.load.json("https://api.example.com/data") YIELD value RETURN value;
  • From JDBC (RDBMS)

CALL apoc.load.jdbc("jdbc:mysql://localhost:3306/mydb","SELECT * FROM users") YIELD row RETURN row;

2. Transform (Clean / reshape data)

APOC helps in data transformation before saving into graph.

Examples

  • String functions

RETURN apoc.text.upper("neo4j"); // "NEO4J"
  • Splitting and trimming

RETURN apoc.text.split("Alice,Bob,Charlie", ","); // ["Alice","Bob","Charlie"]
  • Mapping JSON fields to nodes

CALL apoc.load.json("file:///users.json") YIELD value AS u MERGE (p:Person {id: u.id}) SET p.name = u.name, p.email = apoc.text.lower(u.email);

3. Load (Insert into Neo4j)

After transforming, load data into nodes and relationships.

Example – Import CSV into graph

users.csv

id,name,role 1,Alice,Developer 2,Bob,Manager

Cypher:

CALL apoc.load.csv("file:///users.csv") YIELD map AS row MERGE (u:User {id: row.id}) SET u.name = row.name, u.role = row.role;

Example – Import JSON with relationships

[ {"name": "Alice", "projects": ["GraphDB", "AI System"]}, {"name": "Bob", "projects": ["GraphDB"]} ]

Cypher:

CALL apoc.load.json("file:///projects.json") YIELD value AS row MERGE (u:User {name: row.name}) FOREACH (proj IN row.projects | MERGE (p:Project {title: proj}) MERGE (u)-[:WORKS_ON]->(p) );

4. Export (Send data out)

  • CSV:

CALL apoc.export.csv.all("all_data.csv", {})
  • JSON:

CALL apoc.export.json.all("all_data.json", {})
  • To relational DB:

CALL apoc.export.jdbc.query( "MATCH (u:User)-[:WORKS_ON]->(p:Project) RETURN u.name, p.title", "jdbc:mysql://localhost:3306/mydb?user=root&password=pass", "user_projects" )

✅ Summary

  • Extractapoc.load.csv/json/xml/jdbc

  • Transformapoc.text.*, apoc.map.*, FOREACH, Cypher functions

  • LoadMERGE nodes/relationships

  • Exportapoc.export.csv/json/jdbc/cypher/graphml

👉 In short: APOC makes Neo4j ETL pipelines super flexible, connecting graphs to almost any system


Comments