繁体   English   中英

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

[英]How to get relation from csv in Neo4J/Cypher using CSV LOAD

我使用的是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加载使用csv文件(第二列)中的关系?

我已经看到了这个答案 ,但是我想使用本地查询语言来做到这一点。

为了验证查询的其余部分是否正确,我设法通过如下硬编码关系来正确创建边:

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)

在本地,不可能创建带有动态标签和带有动态类型的关系的节点。

这就是为什么要有一个程序的原因。

如果你想本身做到这一点,你知道你的所有不同的价值relation列,您可以创建一个像许多CYPHER脚本(每个值一个):

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM