如何使用CSV LOAD从Neo4J / Cypher中获取csv的关系

时间:2017-12-22 08:16:55

标签: graph neo4j cypher graph-databases

我使用Neo4J Community Edition版本3.2.1。

考虑带有边缘的CSV文件:

node1,relation,node2,type
1,RELATED_TO,2,Married
2,RELATED_TO,1,Married
1,RELATED_TO,3,Child
2,RELATED_TO,3,Child
3,RELATED_TO,4,Sibling
3,RELATED_TO,5,Sibling
4,RELATED_TO,5,Sibling

我已经为此创建了节点。然后我运行以下csv load命令:

load csv with headers from
"file:///test_dataset/edges.csv" as line
match (person1:Person {pid:line.node1}),
    (person2:Person {pid:line.node2})
create (person1)-[:line.relation {type:line.type}]->(person2)

但是这会返回以下错误:

Invalid input '.': expected an identifier character, whitespace, '|', a length specification, a property map or ']' (line 5, column 24 (offset: 167))
"create (person1)-[:line.relation {type:line.type}]->(person2)"

似乎我不能像这样使用“line.relation”。如何使用csv load?

来使用csv-file(第二列)中的关系

我见过this answer,但我想使用原生查询语言。

要验证查询的其余部分是否正确,我已设法通过硬编码这样的关系来正确创建边缘:

load csv with headers from
"file:///test_dataset/edges.csv" as line
match (person1:Person {pid:line.node1}),
    (person2:Person {pid:line.node2})
create (person1)-[:RELATED_TO {type:line.type}]->(person2)

1 个答案:

答案 0 :(得分:3)

本地无法创建具有动态标签的节点以及与动态类型的关系。

这就是为什么有一个程序。

如果您希望以原生方式进行操作并且知道relation列的所有独特价值,则可以创建许多类似的密码脚本(每个值一个):

LOAD CSV WITH HEADERS FROM "file:///test_dataset/edges.csv" AS line
WITH line WHERE line.relation ='RELATED_TO'
MATCH (person1:Person {pid:line.node1})
MATCH (person2:Person {pid:line.node2})
CREATE (person1)-[:RELATED_TO {type:line.type}]->(person2)