Neo4j 数据批量导入

二次信任 提交于 2020-01-22 05:43:50

目前主要有以下几种数据插入方式:
Cypher CREATE 语句,为每一条数据写一个CREATE 
Cypher load csv语句,将数据转成CSV格式,通过LOAD CSV读取数据。 
官方提供的Java API —— Batch Inserter 
大牛编写的 BatchImport  工具 
官方提供的 neo4j-import 工具

 这边重点来说一下官方最快的neo4j-import,使用的前提条件:

  • graph.db需要清空;
  • neo4j需要停掉;
  • 接受CSV导入,而且格式较为固定;
  • 试用场景:首次导入
  • 节点名字需要唯一

比较适用于:首次导入、无法迭代更新

简单的Demo(数据导入之前需要停止neo4j服务)

movies.csv.

movieId:ID,title,year:int,:LABEL
tt0133093,"The Matrix",1999,Movie
tt0234215,"The Matrix Reloaded",2003,Movie;Sequel
tt0242653,"The Matrix Revolutions",2003,Movie;Sequel

其中,title是属性,注意此时需要有双引号;year:int也是属性,只不过该属性是数值型的; 
:LABEL:ID一样生成了一个新节点,也就是一套数据可以通过:生成双节点 
actors.csv.

personId:ID,name,:LABEL
keanu,"Keanu Reeves",Actor
laurence,"Laurence Fishburne",Actor
carrieanne,"Carrie-Anne Moss",Actor

roles.csv. 
其中,:LABEL是节点的附属属性,其中personId:ID一定是唯一的:LABEL可以不唯一。 
而且,载入之后,:LABEL单独会成为新的节点,而且是去重的。

:START_ID,role,:END_ID,:TYPE
keanu,"Neo",tt0133093,ACTED_IN
keanu,"Neo",tt0234215,ACTED_IN
keanu,"Neo",tt0242653,ACTED_IN
laurence,"Morpheus",tt0133093,ACTED_IN
laurence,"Morpheus",tt0234215,ACTED_IN
laurence,"Morpheus",tt0242653,ACTED_IN
carrieanne,"Trinity",tt0133093,ACTED_IN
carrieanne,"Trinity",tt0234215,ACTED_IN
carrieanne,"Trinity",tt0242653,ACTED_IN

其中,这个节点的属性,role没有标注:,role是属性,可以加双引号,也可以不加。最好是指定一下格式,譬如:int为数值型,还有字符型roles:string[]

 

window执行:

neo4j-import.bat --into ../data/databases/graph.db --id-type string --nodes:attribute ../import/movies.csv --relationships ../import/actors.csv --relationships ../import/roles.csv
  • --into,是指定存入名字,可以修改名字。
  • --nodes:attribute,其中,nodes:后面是用来指定节点大类的名称的
  • --id-type string,之前节点ID只能由数字组成,现在允许字符+数字共同定义。

最后启动:neo4j console

 

数据量小的话,可以考虑用Load csv 示例:

USING PERIODIC COMMIT 10

LOAD CSV WITH HEADERS FROM "file:///actors.csv" AS line

create (a:actors{personId:line.personId,name:line.name,LABEL:line.LABEL})

 

USING PERIODIC COMMIT 10

LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line

create (a:movies{movieId:line.movieId,title:line.title,year:line.year,LABEL:line.LABEL})

 

LOAD CSV WITH HEADERS FROM "file:///roles.csv" AS line with line

merge  (p1:actors{personId:line.START_ID})

merge  (p2:movies{movieId:line.END_ID})

WITH * create (p1)-[r:relstion]->(p2)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!