【发布时间】:2016-11-24 21:45:36
【问题描述】:
我有一个节点表和一个边缘表,它们都可以作为 CSV 文件使用。 我设法通过以下方式加载节点表:
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 作为 :InfoNodes 的属性,这很好。
InfoNodes 与其他 InfoNodes 有关系,例如这些关系存在于具有相同标签的节点之间。 这些关系存储在可作为附加 CSV 文件使用的 Edge 表中。 此 Edge 表的每一行都包含 idfrom 和 idto 字段,这些字段根据 id 属性定义 InfoNode 之间的关系。 Edge 表还包含 3 个表示关系属性的附加字段。 firstproperty 始终是一个字符串,并且从不为 NULL,例如绝不是空字符串。 secondproperty 和 thirdproperty 都是字符串类型,可以有 NULL 值,如 ""。所以 secondproperty 和/或 thirdproperty 可以包含 NULL 值。 我尝试使用此 Edge 表来创建 (: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 错误消息是:无法使用第二属性的空属性值合并关系。 当我从第二个脚本中删除 secondproperty 字段和 secondproperty: property 时,会出现提到 thirdproperty: Cannot merge relationship using null property value for thirdproperty 的相同类型的错误 当我从前面的脚本中删除 secondproperty 和 thirdproperty 字段和属性时,会创建 InfoNode 之间的 [:RELATIONS] 关系,包括存储为 firstproperty 的 firstproperty 表字段:[:RELATION] 关系的属性。
问题:如何扩展第二个脚本以便从 Edge 表中将第二个属性和第三个属性字段加载到第二个属性:和第三个属性:[:RELATION] 关系中,包括 NULL 值?
Can't MERGE with null values; 'Cannot merge node using null property value' in neo4j 描述了相同的问题,但在多个字段/属性具有 NULL 值的情况下不回答我的问题。
【问题讨论】:
-
相同节点之间是否存在多个关系,但某些属性的值不同?还是 (idfrom, idto) 对都是唯一的?
-
:InfoNodes 可以与其他 :InfoNodes 有 1 个或多个关系,但在多个关系的情况下,每个关系都有自己的标签。因此,InfoNod 之间的多个关系在 Edge 表中确实具有自己唯一的 idfrom/idto,并具有自己的关系属性作为字段。