neo4j定期提交apoc.load.jdbc

neo4j定期提交apoc.load.jdbc,neo4j,Neo4j,我有一个oracle表,行数>2亿,我希望使用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)

我有一个oracle表,行数>2亿,我希望使用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)
但是,
使用定期提交
似乎只适用于
加载CSV
,当我尝试使用
apoc.LOAD.jdbc

无效输入“c”:应为空白、注释或LoadCSVQuery(第2行第1列(偏移量:30)) 调用apoc.load.jdbc('oasis_whs','neo4j_exp')收益行

我已经研究了
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})