我有很多名为 的 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)
您可以通过构造文件名来处理多个文件。不幸的是,在使用查询提示时这似乎会中断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)
就您的实际负载查询而言。您name和value节点是否在文件中多次出现?如果它们是唯一的,您最好分多次加载数据。首先加载没有索引的节点;然后在加载节点后添加索引;然后最后一步建立关系。
使用CREATEfor:kind关系将导致多个关系,即使 的值相同csv.kind。MERGE如果是这种情况,您可能想改用它。
对于 100 GB 的数据,如果您从空数据库开始并寻求速度,我会考虑使用bin/neo4j-admin import.
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |