加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

neo4j periodic commit apoc.load.jdbc

发布时间:2020-12-15 02:17:53 所属栏目:Java 来源:网络整理
导读:我有一个带有 200M行的oracle表,我想用apoc.load.jdbc加载到neo4j.如何在不耗尽记忆的情况下完成这项工作.基本上我想表现相当于 USING PERIODIC COMMIT CALL apoc.load.jdbc('alias','table_name') yield row MATCH (r:Result {result_id:row.RESULT_ID}) MA
我有一个带有> 200M行的oracle表,我想用apoc.load.jdbc加载到neo4j.如何在不耗尽记忆的情况下完成这项工作.基本上我想表现相当于

USING PERIODIC COMMIT  
CALL apoc.load.jdbc('alias','table_name') yield row  
MATCH (r:Result {result_id:row.RESULT_ID})   
MATCH (g:Gene   {gene_id  :row.ENTITY_ID})  
create (r)-[:EXP {expression_level:row.EXPRESSION_LEVEL}]->(g)

但是,USING PERIODIC COMMIT似乎只能与LOAD CSV一起使用,并在使用apoc.load.jdbc进行尝试时出现以下错误

Invalid input ‘c’: expected whitespace,comment or LoadCSVQuery (line 2,column 1 (offset: 30))
“call apoc.load.jdbc(‘oasis_whs’,‘neo4j_exp’) yield row”

我已经查看了apoc.periodic.iterate和apoc.periodic.commit但是前者尝试先将整个表读入内存然后迭代,而后者一遍又一遍地重复相同的查询,这在此不起作用用例.

oracle表是分区的,我可以应用WHERE过滤器一次加载一个分区,但是,某些分区仍然包含的数据多于内存中的数据.

我不能成为第一个有这个问题的人,可以吗?

提前致谢.

解决方法

可能有点晚了,但对于其他人来说,我遇到了同样的问题,一个大型查询杀死了我的机器,并且使用apoc.period.iterate得到了极大的帮助.您可以使用批量大小来查看适合您的方法. retries参数将重新运行任何失败的批处理(可能在失败的部分完成之前,需要运行查询的另一部分).

CALL apoc.periodic.iterate('CALL apoc.load.jdbc('alias','table_name') yield row','
MATCH (r:Result {result_id:row.RESULT_ID})   
MATCH (g:Gene   {gene_id  :row.ENTITY_ID})  
create (r)-[:EXP {expression_level:row.EXPRESSION_LEVEL}]->(g)',{batchSize:10000,iterateList:true,parallel:true,retries:20})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读