cypher - 加载多个 csv 文件

blu*_*mmb 5 csv neo4j cypher

我有很多名为 的 csv 文件0_0.csv , 0_1.csv , 0_2.csv , ... , 1_0.csv , 1_1.csv , ... , z_17.csv

我想知道如何将它们导入循环或其他什么?

我也想知道我做得好吗?(每个文件50MB,整个文件大小约100GB)

这是我的代码:

create index on :name(v)
create index on :value(v)    

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///0_0.txt" AS csv
FIELDTERMINATOR ',' 
MERGE (n:name {v:csv.name}) 
MERGE (m:value {v:csv.value})
CREATE (n)-[:kind {v:csv.kind}]->(m)
Run Code Online (Sandbox Code Playgroud)

Dav*_*ett 4

您可以通过构造文件名来处理多个文件。不幸的是,在使用查询提示时这似乎会中断USING PERIODIC COMMIT,因此它对您来说不是一个好的选择。您可以创建一个脚本来包装它并向其发送命令bin/cypher-shell

UNWIND ['0','1','z'] as outer
UNWIND range(0,17) as inner
LOAD CSV WITH HEADERS FROM 'file:///'+ outer +'_' + toString(inner) + '.csv' AS csv
FIELDTERMINATOR ',' 
MERGE (n:name {v:csv.name}) 
MERGE (m:value {v:csv.value})
CREATE (n)-[:kind {v:csv.kind}]->(m)
Run Code Online (Sandbox Code Playgroud)

就您的实际负载查询而言。您namevalue节点是否在文件中多次出现?如果它们是唯一的,您最好分多次加载数据。首先加载没有索引的节点;然后在加载节点后添加索引;然后最后一步建立关系。

使用CREATEfor:kind关系将导致多个关系,即使 的值相同csv.kindMERGE如果是这种情况,您可能想改用它。

对于 100 GB 的数据,如果您从空数据库开始并寻求速度,我会考虑使用bin/neo4j-admin import.