Search code examples
csvneo4jcypherload-csv

Neo4j Cypher - creating nodes and setting labels with LOAD CSV


I’m trying to use LOAD CSV to create nodes with the labels being set to values from the CSV. Is that possible? I’m trying something like:

LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line
CREATE (x:line.label)

...but I get an invalid syntax error. Is there any way to do this?


Solution

  • bicpence,

    First off, this is pretty easy to do with a Java batch import application, and they aren't hard to write. See this batch inserter example. You can use opencsv to read your CSV file.

    If you would rather stick with Cypher, and if you have a finite set of labels to work with, then you could do something like this:

    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS LINE
    CREATE (n:load {lab:line.label, prop:line.prop});
    
    CREATE INDEX ON :load(lab);
    
    MATCH (n:load {lab:'label1'})
    SET n:label1
    REMOVE n:load
    REMOVE n.lab;
    
    MATCH (n:load {lab:'label2'})
    SET n:label2
    REMOVE n:load
    REMOVE n.lab;
    

    Grace and peace,

    Jim