首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >neo4j进阶操作(四)neo4j导入csv,使用load导入csv文件进入neo4j

neo4j进阶操作(四)neo4j导入csv,使用load导入csv文件进入neo4j

作者头像
学到老
发布2019-01-25 14:00:37
30.9K0
发布2019-01-25 14:00:37
举报

neo4j如何导入csv,导入关系与节点

常见导入形式对比

CREATE语句

LOAD CSV语句

Batch Inserter

Batch Import

Neo4j-import

适用场景

1 ~ 1w nodes

1w ~ 10 w nodes

千万以上 nodes

千万以上 nodes

千万以上 nodes

速度

很慢 (1000 nodes/s)

一般 (5000 nodes/s)

非常快 (数万 nodes/s)

非常快 (数万 nodes/s)

非常快 (数万 nodes/s)

优点

使用方便,可实时插入。

使用方便,可以加载本地/远程CSV;可实时插入。

速度相比于前两个,有数量级的提升

基于Batch Inserter,可以直接运行编译好的jar包;可以在已存在的数据库中导入数据

官方出品,比Batch Import占用更少的资源

缺点

速度慢

需要将数据转换成CSV

需要转成CSV;只能在JAVA中使用;且插入时必须停止neo4j

需要转成CSV;必须停止neo4j

需要转成CSV;必须停止neo4j;只能生成新的数据库,而不能在已存在的数据库中插入数据。

####采用load 形式导入csv

本文使用的是windows下的neo4j browser,在导入数据之前,需要将EXCEL另存为CSV,如果有多个sheet,则需要分开单独存储

USING PERIODIC COMMIT 300 LOAD CSV WITH HEADERS FROM “file:///test.csv” AS line

MERGE (a:actors{name:line.name,type:line.type,id:line.id})

本地数据文件放在XXX\Neo4j\graph.db\import文件夹内,远程数据文件可以使用文件URL

在这里本人就是在import文件夹里放了一个actors.csv 文件,然后指定file:///actors.csv 即可访问该文件

可变参数解释:

1、USING PERIODIC COMMIT 300

使用自动提交,每满300条提交一次,防止内存溢出

2、WITH HEADERS

从文件中读取第一行作为参数名,只有在使用了该参数后,才可以使用line.name这样的表示方式,否则需使用line0的表示方式

3、AS line

为每行数据重命名

4、MERGE

用merge比用create好一点,可以防止数据重复

上面的语句可修改为如下(我用的是下面的)

USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///actors.csv" AS line
create (a:actors{personId:line[0],name:line[1],type:line[2]})

actors.csv 文件位于neo4j 的import 文件目录下。

导入成功后的结果:

继续导入:

USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///movies.csv" AS line
create (a:movies{movieId:line[0],name1:line[1],year:line[2],tag:line[3]})
MATCH(m:movies) return m

接下来导入关系

USING PERIODIC COMMIT 10

LOAD CSV FROM “file:///roles.csv” AS line

MATCH (from:movies{movieId:line2}),(to:actors{personId:line0})

merge (from)-[r:ACTED_IN{miles:line1}]-> (to)

return r

MATCH p=()-[r:ACTED_IN]->() RETURN p LIMIT 25

用于测试,忽略效果,注意语法与细节

可能遇到的问题:

1、导入后中文乱码

因为neo4j是utf-8的,而CSV默认保存是ANSI的,需要用记事本另存为成UTF-8的

2、如何导入关系

在neo4j中,虽然有一个自增的id属性,但是要想使用它还是很麻烦的,尤其是在web管理端

因此在使用CSV创建关系时,需要我们自己指定或添加一个属性来作为“主键”,在创建关系时根据该属性来获取节点,并添加关系

USING PERIODIC COMMIT 10

LOAD CSV FROM “file:///test.csv” AS line

match (from:actors{persionid:line0),(to:position{id:1})

merge (from)-[r:fly{miles:line2,time:line3,price:line4}]-(to)

return r

参考文献

https://cloud.tencent.com/developer/article/1387712 按照此链接数据生成了,把neo4j关闭了.删除graph.db仍然失败。

先整理出一些收集的资料,稍后整理

https://blog.csdn.net/alantuling_jt/article/details/58181556

https://blog.csdn.net/macanv/article/details/78296066

https://blog.csdn.net/ilasjdklfj/article/details/79118461

https://blog.csdn.net/xingxiupaioxue/article/details/71747284

https://blog.csdn.net/qq_23318779/article/details/66970960

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档