我需要向Neo4j数据库添加更多数据,而不会创建重复的节点。合并应处理此问题但在使用CSV加载时失败。
我已经阅读了几个问题的解决方案,但他们没有使用Neo4j 3.3.3。我的CSV文件很简单:
Kit|sPOS|ePOS
102866|2781761|2783146
102866|2783227|2783836
102866|2783837|2783841
102866|2783842|2783861
102866|2784027|2790759
102866|2790762|2793652
我的Cypher查询是:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
return b
回报是:
无法使用sPOS的空属性值合并节点
因此,它正在读取文件,但却不正确地解释它。 CSV中的sPOS没有NULL值。
这个带有create的Cypher查询按预期生成节点:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
create (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
return b
如果我没有属性,则按预期生成单个节点:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode)
return b
我尝试过各种格式的建议解决方案,但错误相同。例如,
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line
merge (b:BEDNode{sPOS:line.sPOS})
on create set b.ePOS=line.ePOS
return b
这似乎是Neo4j中的一个错误。寻求有关我的错误或解决方法的帮助。
答案 0 :(得分:3)
LOAD CSV
使用逗号作为默认字段终止符。由于您使用的是管道,因此您应specify it使用FIELDTERMINATOR
子句:
LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line FIELDTERMINATOR '|'
merge (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
return b