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行,循环执行直到所有数据导入完成:
- 先执行查询获取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批,
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
相关产品推荐
相关产品推荐

