【问题标题】:Neo4j CSV Load with merge gives NULL error带有合并的 Neo4j CSV 加载给出 NULL 错误
【发布时间】:2018-08-19 04:33:32
【问题描述】:

我需要在不创建重复节点的情况下向 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

我尝试了各种格式的建议解决方案,但出现相同的 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 中的一个错误。寻求有关我的错误或解决方法的帮助。

【问题讨论】:

  • 我刚刚注意到 CREATE 查询在生成节点时不会创建它们的属性。

标签: neo4j cypher


【解决方案1】:

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

【讨论】:

  • 是的。我的 CSV 文件中也有错误。 Neo4j 需要引号。
  • @DavidAStumpf 这部分是正确的。在您的情况下,不使用引号会产生整数属性。
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多