1

我正在使用以下命令将 csv 文件中的数据加载到 Neo4j 中。输入文件很大,有数百万行。在运行此查询时,我可以查询节点数并检查进度。但是一旦它停止创建节点,我想它会继续创建关系。但我无法检查此步骤的进度。

我有两个疑问:

  1. 它是否为每行文件处理命令,即为每个源代码行创建节点和关系等?
  2. 或者它一次性创建所有节点,然后创建关系。

无论如何,我想监视以下命令的进度。创建节点后似乎卡住了,当我尝试查询0作为输出的关系数时。

我在key属性上创建了一个约束。

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]));
4

1 回答 1

3

对于 CSV 文件的每一行,Neo4j 都在执行密码脚本,即。:

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]));

干杯

于 2017-07-09T11:58:49.137 回答