用Cypher的LOAD命令来导入数据,以及导入过程中我产生的若干问题

用Cypher的LOAD命令来导入数据

前言:

本篇文章不像大多数的文章千篇一律,经过转载来争取阅读量博得眼球,本篇文章是自己亲身操作,看过无数的文章,经过无数次失败总结出来最便捷,最简单有效的方法,也会列出我经历的一些失败经历,并且我是如何解决的,请耐心看完。

nosql数据库里,学习图数据库Neo4j,想创建一些节点来学习一下Cypher语言,如何来查询,但是自己按照教程创建的节点数量太少了,演示的效果并不明显,再加上课程需要演示的内容,是图数据库适用场景和不适用场景,使用场景大概有社交网络,推荐搜索机制和最短路径的一些内容,为了演示效果,所以在某城市数据中心下载了一些关于交通线路的内容,方便来演示最短路径查询问题

基础内容

首先先描述一下准备工作,以及注意事项

  1. 在导入数据前你需要有数据,而且数据必须为csv格式的
  2. 有些文章他没有csv里面具体的图片,大家看起来就会很费劲,所以我把csv里的内容公开,大家照着葫芦画瓢也很方便,便于造轮子。
  3. 我这里将一个数据文件分成了三个csv文件存放,这样做方便于创建节点,连接关系,我个人认为neo4j还没有智能到你只要把一个存着各种数据的文件交给他,他会自动帮你分类出节点和关系以及他们的属性
    在这里插入图片描述
  4. 这里具体的介绍一下各个csv文件里都需要什么内容:
    我的数据刚才说了,是关于城市交通的,start.csv存放的是起始节点,end.csv存放的是终点节点,relation存放的是关系。
  5. start.csv需要像这样有id,有属性,LAEBL表示是标签,这个在neo4j-admin导入方式里需要用到,这里暂时不要用,至于那种方法我一会儿再说在这里插入图片描述
  6. end.csv这个文件和start那个文件内容差不多,因为都是结点文件,所以内容几乎差不多这,可以看到这里id很乱,实际上我可不是乱打的啊!我可是有备而来,他是车次号,为了方便和start的id连接,所以我才把车次号弄成id在这里插入图片描述
  7. relation.csv这个文件关键了哈,和上文一样,如果你想用neo4j-admin命令行来弄,里面的内容有些地方需要固定的形式,后文再讲,这里只需要保证第一列是起始关系的id,第二列是终止关系的id,剩下的属性无所谓了在这里插入图片描述
  8. 注意事项:第一个注意事项是csv文件存放的位置:这个是根据你新建项目的位置找到你的项目,把文件放在import文件下面,第二个注意事项是csv文件需要utf-8的编码格式
    在这里插入图片描述
  9. 如何将csv改为utf-8编码,我就说好用的那种了,把csv保存好之后,用记事本打开,另存为utf-8的csv格式文件。

Cypher进行load导入结点数据

1.打开存放着数据的数据库项目
2.输入代码,创建结点

开始结点导入

在这里插入图片描述

LOAD CSV FROM "file:///start.csv" AS line
	merge (s:start{ID:line[0],state:line[1]})

错误的内容:
1.我看到大多数文章里都有

USING PERIODIC COMMIT 10

这样的代码在我的代码前面,但是我的数据库就没有让用这个代码,说是用冲突,这个代码的意思就是每10个一提交,具体因为什么错的我也不知道,反正不加上也没关系
2.line[]的内容是从0开始的

结束结点导入

在这里插入图片描述
1.和开始结点差不多,不用太具体讲了
注意一下:再强调一下,我这里开始结点和终点结点不是说关系的开始与终止,是我这个数据集是交通的,出发地和目的地是放在这两个节点数据文件里
2.放个代码,大家看看:

LOAD CSV FROM "file:///end.csv" AS line
merge (e:end{ID:line[0],state:line[1]})
关系数据的导入(重点

前两个数据我导入的时候没遇见太大的问题,主要出现在关系数据这里(失败的图片)
那么为什么难呢,因为他需要连接起始节点和终止结点,所以代码的准确性需要得到很高保证。

LOAD CSV FROM "file:///relation.csv" AS line 
MATCH (from:start{ID:line[0]}),(to:end{ID:line[1]})
MERGE (from)-[r:relation{time:line[2],car:line[3],far:line[4],price:line[5]}]-> (to)

这里start应该是你第一个结点的名字,end是第二个结点的名字,ID用的是你关系数据里面的第一列,和第二列。这个一定要弄清楚,下面的代码就是添加关系名字,和关系的属性。
在这里插入图片描述
成功的截图就是这样啦

说一下我使用neo4j自带的neo4j-admin出现的问题

其实我就已经很接近成功了

1.这个数据存放的位置和load的位置不太一样,他需要放在neo4j解压后的根目录下的bin里,而且要在bin里重新创建一个名为import的文件夹,很多文章没有说这个事,让我走了不少弯路

2.neo4j-admin这个方法是需要在命令行里操作的,首先还需要关掉你的neo4j,而且还要保证你的数据库里没有任何数据了,也就是传说中的删库,我一删库,把插件删没了,差点之前的数据也都没了,心态差点炸裂。
3.大概的代码是这样的

neo4j-admin import --database=graph01.db --nodes "import/start.csv" --nodes "import/end.csv" --relationships "import/relation.csv" 
 --database=graph01.db

这个代码是用来创建一个新的数据库,而且你要保证这个库里没有任何数据,我就折在这了,不过前序的问题都已经解决了,如果他告诉你格式有问题,就试试这个格式,绝对没问题。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Neo4jLOAD CSV 导入功能可以更有效地导入大量数据。以下是一个使用 LOAD CSV 导入数据的示例代码: 首先,假设你有一个名为 `hz_relation.csv` 的 CSV 文件,其包含了节点和关系的信息,例如: ``` start_node,end_node,relationship_type A,B,KNOWS B,C,FRIEND_OF C,D,WORKS_WITH ``` 然后,你可以使用以下的 Cypher 查询语句从 CSV 文件导入数据: ``` USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///hz_relation.csv" AS row MERGE (start:Node {name: row.start_node}) MERGE (end:Node {name: row.end_node}) MERGE (start)-[:RELATIONSHIP_TYPE]->(end) ``` 这个查询语句将 CSV 文件的每一行都导入为一个节点和一条关系。`USING PERIODIC COMMIT` 用于在导入大量数据时将事务拆分为更小的批次,以防止内存使用过度。 在这个查询语句,我们使用 `LOAD CSV WITH HEADERS` 从 CSV 文件加载数据,并将每一行作为一个名为 `row` 的映射。然后,我们使用 `MERGE` 命令创建每个节点,并使用 `MERGE` 命令创建每条关系。在这个例子,我们使用 `relationship_type` 列的值作为关系的类型。 最后,你可以使用以下的 Python 代码来运行这个 Cypher 查询语句: ```python from neo4j import GraphDatabase uri = "bolt://localhost:7687" username = "neo4j" password = "password" driver = GraphDatabase.driver(uri, auth=(username, password)) with driver.session() as session: session.run(""" USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///hz_relation.csv" AS row MERGE (start:Node {name: row.start_node}) MERGE (end:Node {name: row.end_node}) MERGE (start)-[:RELATIONSHIP_TYPE]->(end) """) ``` 这个代码将会在 Neo4j 数据库创建节点和关系,并将它们导入到你的图。请确保你已经安装了 Py2neo 来运行以上代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值