Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 获取Neo.ClientError.Statement.SemanticError:无法使用null属性合并节点_Neo4j_Cypher_Neo4j Apoc - Fatal编程技术网

Neo4j 获取Neo.ClientError.Statement.SemanticError:无法使用null属性合并节点

Neo4j 获取Neo.ClientError.Statement.SemanticError:无法使用null属性合并节点,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,您好,我正在尝试建立我的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 所以我想建立AGE

您好,我正在尝试建立我的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:无法使用名称的null属性值合并节点

而且最近我也试过了

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
我没有得到错误,但我没有得到关系的结果

事实上,我有一种感觉,我错过了一些非常愚蠢的要点。请帮助我理解为什么我会犯这个错误。帮我解决这个问题。感谢

您在第一次查询中得到SemanticError,因为文件中的某个地方没有CUSTOMERID或AGENTID的valuenull,因此就好像您试图在null值上合并节点一样。您需要在合并之前检查null值,并跳过这些值的合并。见下文

不建议在单个查询中使用多个合并。一个查询中只建议进行一次合并

建议您将查询分为两部分,并使用第二部分创建关系

加载代理:

加载客户ID:

在AgentID和CustomerID之间创建关系:


谢谢拉杰的回答。在我的情况下,它没有工作,直到我做了一些修改。这是我的新代码:

一,。加载代理:

二,。加载客户ID:

三,。在AgentID和CustomerID之间创建关系:


实际上@Raj已经提到了不能与MERGE一起使用的地方。

谢谢回复@Raj。我已经单独加载了文件,MERGE工作得很好。但第三个查询不起作用。它并没有给我错误,但它并没有显示任何变化,并没有记录。哦,它起作用了。现在我刚换了一个名字:非常感谢。我正在向你学习一些技巧
LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WHERE row.AGENTID IS NOT NULL
MERGE (p1:AGENTID {name: row.AGENTID});
LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
WHERE row.CUSTOMERID IS NOT NULL
MERGE (p2:CUSTOMERID {name: row.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
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});
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})
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