我有一个Node表和Edge表,它们都可以作为CSV文件使用。我设法通过以下方式加载Node表:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///NodesETL.csv' AS line
CREATE (:InfoNodes {id: toString(line.id), description: toString(line.description)})
此查询使用CSV文件的字段值作为:InfoNodes的属性来创建InfoNode,这很好。
InfoNode与其他InfoNode具有关系,例如,这些关系存在于具有相同标签的Node之间。这些关系存储在Edge表中,可作为其他CSV文件使用。Edge表的每一行都包含idfrom和idto字段,这些字段根据InfoNode的id属性定义了InfoNode之间的关系。边缘表还包含3个其他字段,表示关系的属性。第一属性始终是一个字符串,并且永远不会为NULL,例如永远不会为空字符串。均为字符串的secondproperty和thirdproperty可以具有NULL值,例如“”。因此,secondproperty和/或thirdproperty可以包含NULL值。我尝试使用此边缘表通过以下方法创建(:InfoNodes)之间的[:RELATIONSHIP {firstproperty:,secondproperty:,thirdproperty:}]关系:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///EdgesETL.csv' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[:RELATION {firstproperty: toString(line.firstproperty), secondproperty: toString(line.secondproperty), thirdproperty: toString(line.thirdproperty)}]->(to)
当Edge表中的secondproperty和thirdproperty包含NULL值时,此第二个Cypher脚本将导致错误。Neo4j错误消息是:无法合并使用null属性值作为第二属性的关系。当我从第二个脚本中删除secondproperty字段和secondproperty:属性时,发生了相同类型的错误,并提到了Thirdproperty:无法为第三属性使用空属性值合并关系当我从上一个脚本中删除secondproperty和thirdproperty字段和属性时,然后[:将创建InfoNode之间的关系,包括存储为[:RELATION]关系的firstproperty:属性的firstproperty表字段。
问题:如何扩展第二个脚本,以便从Edge表中将第二个属性和Thirdproperty字段加载到[:RELATION]关系(包括NULL值)中的secondproperty:和thirdproperty:中?
不能与空值合并;neo4j中的“无法使用空属性值合并节点”描述了相同的问题,但是在具有空值的多个字段/属性的情况下无法回答我的问题。
您将要重新查看开发人员指南中的“合并”部分。具体来说,在简介中,提到了ON CREATE和ON MATCH。这样,您可以在MERGE导致创建的情况下,或者在MERGE与现有元素匹配的情况下设置属性。
通常,您只希望合并唯一定义事物的属性(例如ID),并在ON CREATE内设置其余属性。
更改后的查询可能类似于以下内容:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///EdgesETL.csv' AS line
MATCH (from:InfoNodes{id: toString(line.idfrom)})
MATCH (to:InfoNodes{id: toString(line.idto)})
MERGE (from)-[r:RELATION {firstproperty: toString(line.firstproperty)}]->(to)
ON CREATE SET r.secondproperty = toString(line.secondproperty), r.thirdproperty = toString(line.thirdproperty)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句