Ram
Ram

Reputation: 97

CSV Data import in neo4j

I am trying to add relationship between existing employee nodes in my sample database from csv file using the following commands:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 
'file:///newmsg1.csv' AS line 
WITH line
MATCH (e:Employee {mail: line.fromemail}), (b:Employee {mail: line.toemail})
CREATE (e)-[m:Message]->(b);

The problem i am facing is that, while there are only 71253 entries in the csv file in which each entry has a "fromemail" and "toemail", I am getting "Created 240643 relationships, completed after 506170 ms." as the output. I am not able to understand what I am doing wrong. Kindly help me. Thanks in advance!

Upvotes: 1

Views: 210

Answers (2)

Bruno Peres
Bruno Peres

Reputation: 16373

Try change your create to CREATE UNIQUE:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 
'file:///newmsg1.csv' AS line 
WITH line
MATCH (e:Employee {mail: line.fromemail}), (b:Employee {mail: line.toemail})
CREATE UNIQUE (e)-[m:Message]->(b);

From the docs:

CREATE UNIQUE is in the middle of MATCH and CREATE — it will match what it can, and create what is missing. CREATE UNIQUE will always make the least change possible to the graph — if it can use parts of the existing graph, it will.

Upvotes: 0

Fabio Lamanna
Fabio Lamanna

Reputation: 21584

You can use MERGE to ensure uniqueness of relationships:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 
'file:///newmsg1.csv' AS line 
WITH line
MATCH (e:Employee {mail: line.fromemail}), (b:Employee {mail: line.toemail})
MERGE (e)-[m:Message]->(b);

Upvotes: 1

Related Questions