带有合并的Neo4j CSV加载会产生NULL错误

时间:2018-03-10 20:03:56

标签: neo4j cypher

我需要向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中的一个错误。寻求有关我的错误或解决方法的帮助。

1 个答案:

答案 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