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进行尝试时出现以下错误
我已经查看了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}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |