Neo4j提供的Load CSV方法实战
Load CSV可以直接在Cypher命令窗口进行调用,是提供的cypher导入数据方法,类似于SQL的inster\delete\update等语法。
导入数据前先建议创建索引,这会增大导入数据的速度。
创建约束:
CREATE CONSTRAINT ON (d:Deal) ASSERT d.dealID IS UNIQUE;
- 如果创建了索引,则没有办法创建索引
- 创建约束会默认创建索引
- 约束和索引的适用场景在于是否允许ID的节点存在,一般对于需要数据性约束的数据如身份证号,可以创建约束,恰好也创建了索引,方便查询。
Load CSV节点
USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM "file:///traindata.csv" AS row CREATE (:Deal
{dealID: row.all_0,
all_1: toInt(row.all_1),
all_2: toFloat(row.all_2),
label: toString(row.class)});
节点CSV文件:
语法解析:
- PERIODIC COMMIT 1000:每1000条提交一次,这个参数非常关键,如果在数据量很大的情况下内存无法同时加载很多数据,所以需要频繁的提交事务,这样可以减小任务失败的风险,并且也会增加数据导入的速度,当然这需要一个合适数量的commit。
- WITH HEADERS:是否使用列名,如果文件中有列明,则可以加这个参数,使用列名的方法就是row.列名,如果要指定列的类型,则增加toInt用于指定类型。
- 加载CSV文件,文件的位置,需要放在Neo4j文件夹下的import文件夹下。
- CREATE :也可以用Merge代替,create为创建,如果存在节点且有约束则不创建,如果不存在则创建。
导入成功:
节点导入速度:1101 个/S(加创建索引所消耗的时间,还于节点属性的多少有关系)
Load CSV节点
USING PERIODIC COMMIT 100000 LOAD CSV WITH HEADERS FROM "file:///elliptic_txs_edgelist.csv" AS row
MATCH (from:Deal{dealID: row.txId1}),(to:Deal{dealID: row.txId2}) MERGE (from)-[f:FLOW]->(to)
关系CSV文件:
语法解析:
- PERIODIC COMMIT 100000:同上。
- WITH HEADERS:同上。
导入成功:
关系导入速度:18W/S
参考:
https://neo4j.com/developer/guide-importing-data-and-etl/