2017-05-27 2 views
0

ich eine CSV-Datei, die die folgenden Header und Zeilen hat:Neo4j LOADCSV - Splitting Spalte in mehreren Knoten

Person,Vehicle 
John,2006 Toyota Corola 
Rick,2014 Honda Civic 
Mary,2015 BMW 5Series 

ich die folgenden Knoten zu schaffen in der Lage sein wollen

Person: {John, Rick, Mary} 
CarMaker: {Toyota, Honda, BMW} 
CarModel: {"Year:2006,Name:Corola", "Year:2014, Name:Civic", "Year:2015, Name:5 Series"} 

Und die folgende Beziehungen:

CarMaker-[:MAKES]->CarModel 
Person-[:DRIVES]->CarModel 

ich die folgende Anweisung verwenden:

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM "file:///FakeNulls.csv" AS line 
MERGE (person:Person {name: line.Person}) 
WITH (SPLIT(line.Vehicle," ") AS words | 
UNWIND words AS word | 
MERGE (carMaker:CarMaker {carMakerName:word[1]}) 
MERGE (carModel:CarModel {carModelName:word[2], carModelYear:word[0]}) 
MERGE (carMaker)-[:MAKES]->(carModel) 
MERGE (person)-[:DRIVES]->(carModel)) 

Jedoch, wenn ich es laufen lasse, erhalte ich eine Fehlermeldung:

Invalid input 'S': expected 'n/N' (line 34, column 32 (offset: 1948)) 
"WITH (SPLIT(line.Vehicle," ") AS words |" 

Alle Ideen, was ich falsch mache?

Vielen Dank im Voraus für jede Hilfe.

-MD

Antwort

0

Sie haben einige ungerade und syntaktisch ungültige Klammer und | Zeichen in Ihrer Abfrage sowie ein UNWIND, das keinen Sinn ergibt, da Sie bereits Indizes in einer Sammlung verwenden, um die gewünschten Werte zu erhalten.

diese feste Version der Abfrage Versuchen:

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM "file:///FakeNulls.csv" AS line 
MERGE (person:Person {name: line.Person}) 
WITH person, SPLIT(line.Vehicle," ") AS word 
MERGE (carMaker:CarMaker {carMakerName:word[1]}) 
MERGE (carModel:CarModel {carModelName:word[2], carModelYear:word[0]}) 
MERGE (carMaker)-[:MAKES]->(carModel) 
MERGE (person)-[:DRIVES]->(carModel) 
+0

Danke für die Antwort @InverseFalcon, dass der Trick. – Cracoras