首页 文章

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

提问于
浏览
0

我需要向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的null属性值合并节点

因此,它正在读取文件,但不正确地解释它 . 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

我尝试过各种格式的建议解决方案,同样的NULL错误 . 例如,

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

  • 3

    LOAD CSV 使用逗号作为默认字段终止符 . 由于您正在使用管道,因此您应使用 FIELDTERMINATOR 子句specify it

    LOAD CSV WITH HEADERS FROM 'file:///bedupload.csv' AS line FIELDTERMINATOR '|'
    merge (b:BEDNode{sPOS:line.sPOS,ePOS:line.ePOS})
    return b
    

相关问题