用Cypher的LOAD命令来导入数据
前言:
本篇文章不像大多数的文章千篇一律,经过转载来争取阅读量博得眼球,本篇文章是自己亲身操作,看过无数的文章,经过无数次失败总结出来最便捷,最简单有效的方法,也会列出我经历的一些失败经历,并且我是如何解决的,请耐心看完。
nosql数据库里,学习图数据库Neo4j,想创建一些节点来学习一下Cypher语言,如何来查询,但是自己按照教程创建的节点数量太少了,演示的效果并不明显,再加上课程需要演示的内容,是图数据库适用场景和不适用场景,使用场景大概有社交网络,推荐搜索机制和最短路径的一些内容,为了演示效果,所以在某城市数据中心下载了一些关于交通线路的内容,方便来演示最短路径查询问题
基础内容
首先先描述一下准备工作,以及注意事项
- 在导入数据前你需要有数据,而且数据必须为csv格式的
- 有些文章他没有csv里面具体的图片,大家看起来就会很费劲,所以我把csv里的内容公开,大家照着葫芦画瓢也很方便,便于造轮子。
- 我这里将一个数据文件分成了三个csv文件存放,这样做方便于创建节点,连接关系,我个人认为neo4j还没有智能到你只要把一个存着各种数据的文件交给他,他会自动帮你分类出节点和关系以及他们的属性
- 这里具体的介绍一下各个csv文件里都需要什么内容:
我的数据刚才说了,是关于城市交通的,start.csv存放的是起始节点,end.csv存放的是终点节点,relation存放的是关系。 - start.csv需要像这样有id,有属性,LAEBL表示是标签,这个在neo4j-admin导入方式里需要用到,这里暂时不要用,至于那种方法我一会儿再说
- end.csv这个文件和start那个文件内容差不多,因为都是结点文件,所以内容几乎差不多这,可以看到这里id很乱,实际上我可不是乱打的啊!我可是有备而来,他是车次号,为了方便和start的id连接,所以我才把车次号弄成id
- relation.csv这个文件关键了哈,和上文一样,如果你想用neo4j-admin命令行来弄,里面的内容有些地方需要固定的形式,后文再讲,这里只需要保证第一列是起始关系的id,第二列是终止关系的id,剩下的属性无所谓了
- 注意事项:第一个注意事项是csv文件存放的位置:这个是根据你新建项目的位置找到你的项目,把文件放在import文件下面,第二个注意事项是csv文件需要utf-8的编码格式
- 如何将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
这个代码是用来创建一个新的数据库,而且你要保证这个库里没有任何数据,我就折在这了,不过前序的问题都已经解决了,如果他告诉你格式有问题,就试试这个格式,绝对没问题。