neo4j - 嵌套 apoc 迭代与 apoc load jdbc 返回 "cannot conclude with CALL"消息

标签 neo4j cypher neo4j-apoc

我正在调用一个嵌套的 apoc 过程来迭代通过 jdbc 驱动程序从 mysql 加载数据以摄取到 Neo4j 中。该语句如下所示:

WITH 'jdbc:mysql://x.x.x.x:3306/schema?user=x&password=x' AS url, 'select * from table' AS query 
CALL apoc.periodic.iterate('CALL apoc.load.jdbc(url, query) YIELD row', 'MERGE (e:MYNODE {id:row.id}) SET e.id = row.id', {batchSize:1000, parallel:false})

收到以下结果:

Neo.ClientError.Statement.SyntaxError: Query cannot conclude with CALL (must be RETURN or an update clause) (line 2, column 1 (offset: 123))
"CALL apoc.periodic.iterate('CALL apoc.load.jdbc(url, query) YIELD row', 'MERGE (e:MYNODE {id:row.id}) SET e.id = row.id', {batchSize:1000, parallel:false})"
 ^

最佳答案

  1. 正如错误消息所示,Cypher 不喜欢您以 CALL 结束查询。子句(除非它是查询中的唯一子句)。您只需添加 RETURN 即可解决此问题子句放在查询末尾,即使您不关心结果。

  2. Cypher 还希望您 YIELD至少有一个来自 CALL 的返回值ed 程序,即使您不关心它。

  3. 您的'CALL apoc.load.jdbc(url, query) YIELD row'字符串不会自动使用您的 urlquery变量。您可以使用parameters来解决这个问题.

此示例解决了所有 3 个问题:

WITH
  'jdbc:mysql://x.x.x.x:3306/schema?user=x&password=x' AS url,
  'select * from table' AS query 
CALL apoc.periodic.iterate(
  'CALL apoc.load.jdbc($url, $query) YIELD row',
  'MERGE (e:MYNODE {id:row.id}) SET e.id = row.id',
  {batchSize:1000, parallel:false, params:{url: url, query: query}}) YIELD batches
RETURN batches

关于neo4j - 嵌套 apoc 迭代与 apoc load jdbc 返回 "cannot conclude with CALL"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58562226/

相关文章:

neo4j - 从 xml 文件初始加载 Neo4j 数据库

Neo4j 密码 - 搜索节点之间没有路径

graph - Neo4j 图形可视化库

plugins - Neo4j安装APOC插件后重启失败

java - Neo4J 与 APOC 和 MongoDB 驱动程序,限制从 Mongo 返回的记录

neo4j - 我在哪里可以找到 Neo4j Desktop 的 apoc.conf?

list - Neo4j - 获取包含子节点列表的节点

database - Neo4j:获取至少与列表中的某些项目相关的节点

mysql - 将连续数据流插入数据库

neo4j:如何查询子图