我使用以下命令将数据从csv文件加载到Neo4j中。输入文件很大,有数百万行。 在运行此查询时,我可以查询节点数并检查进度。但是一旦它停止创建节点,我想它会继续创建关系。但我无法检查这一步的进展情况。
我有两个疑问:
无论如何我想监视以下命令的进度。它似乎在创建节点后卡住了,当我尝试查询关系数时,我得到0
作为输出。
我在键属性上创建了一个约束。
CREATE CONSTRAINT ON (n:Node) ASSERT n.key is UNIQUE;
这是加载文件的密码。
USING PERIODIC COMMIT
LOAD CSV FROM "file:///data/abc.csv" AS row
MERGE (u:Node {name:row[1],type:row[2],key:row[1]+"*"+row[2]})
MERGE (v:Node {name:row[4],type:row[5], key:row[4]+"*"+row[5]})
CREATE (u) - [r:relatedTo]-> (v)
SET r.type = row[3], r.frequency=toint(trim(row[6]));
答案 0 :(得分:3)
对于CSV文件的每一行,Neo4j都在执行cypher脚本,即。 :
MERGE (u:Node {name:row[1],type:row[2],key:row[1]+"*"+row[2]})
MERGE (v:Node {name:row[4],type:row[5], key:row[4]+"*"+row[5]})
CREATE (u) - [r:relatedTo]-> (v)
SET r.type = row[3], r.frequency=toint(trim(row[6]))
由于using periodic commit
,每500行(默认值),提交完成。
当Neo4j完成解析500行时,您只能看到图表中的更改。
但是您的脚本未经过优化,您没有使用合并约束。
您应该考虑使用此脚本:
USING PERIODIC COMMIT
LOAD CSV FROM "file:///data/abc.csv" AS row
MERGE (u:Node {key:row[1]+"*"+row[2]})
ON CREATE SET u.name = row[1],
u.type = row[2]
MERGE (v:Node {key:row[4]+"*"+row[5]})
ON CREATE SET v.name = row[4],
v.type = row[5]
CREATE (u)-[r:relatedTo]->(v)
SET r.type = row[3], r.frequency=toint(trim(row[6]));
干杯