无法在大比例因子 TPCH 数据集上创建关系

问题描述 投票:0回答:1

我正在使用 Neo4J EE 5.10 并尝试导入比例因子 100 -> 100GB 数据的 TPCH 数据集。我使用 neo4j admin import 导入了节点(这里没有问题),然后开始使用以下格式在节点之间创建关系:

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;

甚至尝试通过将新参数设置为超级键来将该字段合并到 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;

所有这些方法都失败了。第一个花费的时间太长:2500 个关系大约需要 24 小时,而 SF100 的数据集有数百万个关系。第二个不会在图中插入任何关系,尽管提交的读取不断增长,但没有提交的写入发生。

我无法导入与 neo4j admin import 的关系,因为数据集结构中缺少具有唯一值的字段,该字段必须保持不变。 我有什么遗漏的吗?有没有其他方法可以在不破坏内存的情况下做到这一点?

import neo4j cypher relationship
1个回答
0
投票

请查看SHOW INDEXES的输出;

SHOW INDEXES;

© www.soinside.com 2019 - 2024. All rights reserved.