You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j HTTP API中CALL {} IN TRANSACTIONS无法使用的问题求助

Neo4j 4.4.3 HTTP API 批量导入解决方案

问题根源

你遇到的报错是因为CALL {...} IN TRANSACTIONS是Neo4j 5.x才引入的Cypher语法,4.4.3版本并不支持这个特性——你调用/db/neo4j/tx/commit确实是HTTP API的隐式事务正确端点,问题出在语法版本不兼容。

可行解决方案(适配4.4.3版本)

方案1:手动分批执行LOAD CSV

通过SKIP和LIMIT拆分CSV数据,每次请求处理1000行,循环执行直到所有数据导入完成:

  1. 先执行查询获取CSV总行数(用于计算分批次数):
curl --location 'http://localhost:7474/db/neo4j/tx/commit' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json; charset=UTF-8' \
--header 'Authorization: Basic bmVvNGo6bmVvNGo=' \ # 替换为你的Neo4j用户名密码Base64编码
--data '{
  "statements": [
    {
      "statement": "LOAD CSV WITH HEADERS FROM '\''file.csv'\'' AS row RETURN count(*) AS total"
    }
  ]
}'
  1. 根据总行数,循环执行分批导入请求(示例为第1批,SKIP 0 LIMIT 1000):
curl --location 'http://localhost:7474/db/neo4j/tx/commit' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json; charset=UTF-8' \
--header 'Authorization: Basic bmVvNGo6bmVvNGo=' \
--data '{
  "statements": [
    {
      "statement": "LOAD CSV WITH HEADERS FROM '\''file.csv'\'' AS row SKIP 0 LIMIT 1000 MERGE (movie:Movies {orderid: row.orderid}) SET movie.name = row.name"
    }
  ]
}'

每次循环递增SKIP的值(比如下一批是SKIP 1000 LIMIT 1000),直到处理完所有行。

方案2:使用APOC扩展的批量处理过程

如果你的Neo4j实例已安装APOC扩展(4.4.3对应APOC版本为apoc-4.4.0.xx),可以用apoc.periodic.iterate实现自动分批事务处理,无需手动拆分:

curl --location 'http://localhost:7474/db/neo4j/tx/commit' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json; charset=UTF-8' \
--header 'Authorization: Basic bmVvNGo6bmVvNGo=' \
--data '{
  "statements": [
    {
      "statement": "CALL apoc.periodic.iterate(\"LOAD CSV WITH HEADERS FROM '\''file.csv'\'' AS row RETURN row\", \"MERGE (movie:Movies {orderid: row.orderid}) SET movie.name = row.name\", {batchSize:1000, parallel:false}) YIELD batches, total RETURN batches, total"
    }
  ]
}'
  • batchSize:1000表示每批处理1000行
  • parallel:false避免并发写入冲突,若数据无冲突可设为true提升速度

注意事项

  • 必须在请求头中加入Authorization,否则会因权限不足报错
  • 确保file.csv的路径符合Neo4j规则:默认只能读取import目录下的文件,可通过修改neo4j.conf中的dbms.directories.import或dbms.security.allow_csv_import_from_file_urls调整路径权限

内容的提问来源于stack exchange,提问作者Ugur Yilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:51:15