GETTING Neo.ClientError.Statement.SemanticError: Cannot merge node using null property

GETTING Neo.ClientError.Statement.SemanticError: Cannot merge node using null property

您好,我正在尝试在我的 csv 文件中建立两列之间的关系 我正在加载具有关系列的 csv 文件,它看起来像这样

RELATIONSHIP,AGENTID,CUSTOMERID,TXNID,TIMESTAMP,AMOUNT,CHANNEL
hasrelation,17956,2025,6C13MXSESN,2019-03-01T11:52:08,10,USSD
hasrelation,17957,2026,6C13MXSEVF,2019-03-01T11:52:09,50,BAPP

所以我想在 AGENTID 和 CUSTOMERID 之间建立关系。关系代码是

load csv with headers from "file:///test.csv" AS row
MERGE (p1:AGENTID {name: row.AGENTID})
MERGE (p2:CUSTOMERID {name: row.CUSTOMERID})
WITH p1, p2, row
CALL apoc.create.relationship(p1, row.relationship, {}, p2) YIELD rel
RETURN rel;

这是为了测试目的,但出现以下错误 Neo.ClientError.Statement.SemanticError: 无法合并节点使用空值 属性 名称

而且最近我也尝试过这个

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
MATCH (f:AGENTID), (s:CUSTOMERID)
WHERE f.Name = row.AGENTID
AND s.Name = row.CUSTOMERID
CALL apoc.create.relationship(f, row.RELATIONSHIP,{}, s) YIELD rel
RETURN rel

我在这里没有收到错误,但我没有收到关系结果

实际上我觉得我错过了一些非常愚蠢的东西point.Kindly帮助我理解为什么我会收到这个错误。并帮助我解决这个问题。谢谢

您在第一个查询中得到 SemanticError,因为文件中某处没有 CUSTOMERIDAGENTID 的值(空),因此您正试图 MERGE 节点上的 null 值。您需要在 MERGE 之前检查空值并跳过 MERGE 。见下文。

不建议在单个查询中使用多个 MERGE一次查询只推荐一个MERGE

建议您将查询分成两个,并使用第二个来创建关系。

加载 AGENTID:

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WHERE row.AGENTID IS NOT NULL
MERGE (p1:AGENTID {name: row.AGENTID});

加载客户 ID:

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WHERE row.CUSTOMERID IS NOT NULL
MERGE (p2:CUSTOMERID {name: row.CUSTOMERID})

创建 AGENTID 和 CUSTOMERID 之间的关系:

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
MATCH (f:AGENTID), (s:CUSTOMERID)
WHERE f.name = row.AGENTID
AND s.name = row.CUSTOMERID
CALL apoc.create.relationship(f, row.RELATIONSHIP,{}, s) YIELD rel
RETURN rel

感谢拉杰的回答。就我而言,直到我做了一些修改后它才起作用。这是我的新代码:

1.加载 AGENTID:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WITH row
WHERE row.AGENTID IS NOT NULL
MERGE (p1:AGENTID {name: row.AGENTID});

2。加载客户 ID:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WITH row
WHERE row.CUSTOMERID IS NOT NULL
MERGE (p2:CUSTOMERID {name: row.CUSTOMERID})

3。在 AGENTID 和 CUSTOMERID 之间创建关系:

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
MATCH (f:AGENTID), (s:CUSTOMERID)
WHERE f.name = row.AGENTID
AND s.name = row.CUSTOMERID
CALL apoc.create.relationship(f, row.RELATIONSHIP,{}, s) YIELD rel
RETURN rel

其实@Raj 已经提到了 "WHERE can not be used with MERGE."