大规模TPCH SF100数据集创建LINEITEM_PARTSUPP关系失败求助
关于Neo4J EE 5.10导入SF100 TPCH数据集创建LINEITEM_PARTSUPP关系的问题
背景
我正在使用Neo4J EE 5.10,导入Scale Factor为100(即100GB)的TPCH数据集。已通过neo4j admin import成功导入所有节点,之后用以下格式创建节点间关系,除LINEITEM_PARTSUPP外,其余类型的关系创建均正常:
LOAD CSV WITH HEADERS FROM "file:///LINEITEM_ORDERS.csv" AS inputRow CALL { WITH inputRow MATCH (l:LINEITEM { l_orderkey: toInteger(inputRow.l_orderkey), l_linenumber: toInteger(inputRow.l_linenumber)}) MATCH (o:ORDERS{o_orderkey: toInteger(inputRow.l_orderkey)}) WITH l,o,inputRow MERGE (l)-[:LINEITEM_ORDERS]->(o) } IN TRANSACTIONS OF 5000 ROWS;
尝试的方法及遇到的问题
方法一:直接匹配复合唯一字段
LINEITEM_PARTSUPP关系需基于复合唯一字段(类似SQL主键)匹配,我先套用上述成功逻辑:
LOAD CSV WITH HEADERS FROM "file:///LINEITEM_PARTSUPP.csv" AS inputRow CALL { WITH inputRow MATCH (l:LINEITEM { l_orderkey: toInteger(inputRow.l_orderkey), l_linenumber: toInteger(inputRow.l_linenumber)}) MATCH (ps:PARTSUPP { ps_partkey: toInteger(inputRow.l_partkey), ps_suppkey: toInteger(inputRow.l_suppkey)}) WITH l,ps MERGE (l)-[:LINEITEM_PARTSUPP]->(ps) } IN TRANSACTIONS OF 5000 ROWS;
问题:耗时极长,24小时仅创建2500条关系,而该SF100数据集此类关系有数百万条。
方法二:生成复合超级键匹配
为PARTSUPP节点生成复合超级键字段:
MATCH (n:PARTSUPP) CALL { WITH n SET n.superkey=n.ps_partkey*100000000+n.ps_suppkey } IN TRANSACTIONS OF 10000 ROWS;
修改关系创建查询如下:
LOAD CSV WITH HEADERS FROM "file:///LINEITEM_PARTSUPP.csv" AS inputRow CALL { WITH inputRow MATCH (l:LINEITEM { l_orderkey: toInteger(inputRow.l_orderkey), l_linenumber: toInteger(inputRow.l_linenumber)}) MATCH (ps:PARTSUPP { superkey: toInteger(inputRow.l_partkey)*100000000+toInteger(inputRow.l_suppkey)}) WITH l,ps MERGE (l)-[:LINEITEM_PARTSUPP]->(ps) } IN TRANSACTIONS OF 10000 ROWS;
问题:已提交的读取量持续增长,但无提交写入,未创建任何关系。
疑问
由于数据集结构限制(需保持原有结构),无法使用neo4j admin import导入关系。请问我遗漏了什么?是否有其他内存友好的方法可解决此问题?
内容的提问来源于stack exchange,提问作者Codrin Esanu
相关产品推荐
相关产品推荐

