Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use a CSV field to define the node label in a LOAD statement

Tags:

csv

neo4j

cypher

This example is taken from https://neo4j.com/developer/guide-importing-data-and-etl/#_importing_the_data_using_cypher"

LOAD CSV WITH HEADERS FROM "file:customers.csv" AS row
    CREATE (:Customer {companyName: row.CompanyName, customerID: row.CustomerID, fax: row.Fax, phone: row.Phone});

What I want to do is use a field in the CSV file to define the label in the node. For example:

LOAD CSV WITH HEADERS FROM "FILE:///Neo4j_AttributeProvenance.csv" AS CSVLine CREATE (q:CSVLine.NodeType { NodeID:CSVLine.NodeID, SchemaName:CSVLine.SchemaName, TableName:CSVLine.TableName, DataType:CSVLine.DataType, PreviousNodeID:CSVLine.PreviousNodeID });

Here is the error I get:

like image 265
nicomp Avatar asked Jul 18 '17 12:07

nicomp


1 Answers

You should have a look at the APOC procedures. In this case there's a procedure able to create nodes dinamically based on column values in your .csv file. The syntax is:

CALL apoc.create.node(['Label'], {key:value,…​})

In your case the simplest syntax should be:

CALL apoc.create.node(["' + CSVLine.NodeType + '"], {NodeID: "' + NodeID:CSVLine.NodeID + '", etc}) yield node
like image 132
Fabio Lamanna Avatar answered Oct 10 '22 23:10

Fabio Lamanna