2017-05-27 35 views
0

我有了下面的头和行的CSV文件拆分柱:Neo4j的LOADCSV - 在多个节点

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

我希望能够创建以下节点

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

而以下关系式:

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

我使用下面的语句:

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)) 

然而,当我运行它,我得到一个错误:什么我做错了

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

任何想法?

在此先感谢您的帮助。

-MD

回答

0

你有一些奇怪的语法和括号无效和|您的查询中的字符以及UNWIND无意义,因为您已将索引用于集合中以获取所需的值。

尝试查询的这个固定的版本:

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

谢谢你的答案@InverseFalcon,该诀窍。 – Cracoras