Neo4j 数据导出为 CSV 格式

来源:互联网 发布:先导爱知在第六季出现 编辑:程序博客网 时间:2024/05/24 05:02

主要介绍将 Neo4j 数据库中数据全部导入到 MySQL 数据库中,将 Neo4j 数据导出为 CSV 格式数据,然后再将 CSV 格式数据导入到 MySQL 中。

这里介绍前半部分,即 Neo4j 数据导出为 CSV 格式,使用的工具为neo4j-shell-tools

实验环境

Ubuntu 系统版本:ubuntu 14.04-desktop-amd64
Neo4j 版本:neo4j-community-3.2.0
neo4j-shell-tools 版本:3.0.1

安装 neo4j-shell-tools

下载传输

neo4j-shell-tools GitHub 地址为:https://github.com/jexp/neo4j-shell-tools ,在“Installation”中直接点击文件下载
这里写图片描述

或使用我下载好的文件,百度网盘链接:http://pan.baidu.com/s/1nvt9iTN 密码:3hie

在 ubuntu 中默认下载地址为“Download”文件夹,将文件复制到 Neo4j 安装目录下。我存放 neo4j-shell-tools 的文件夹路径是/home/erik/Downloads/neo4j-shell-tools_3.0.1.zip,Neo4j 的安装路径为/usr/local/neo4j/neo4j-community-3.2.0/,所以复制操作为

cp /home/erik/Downloads/neo4j-shell-tools_3.0.1.zip /usr/local/neo4j/neo4j-community-3.2.0/

这里写图片描述

解压

要解压到 Neo4j 的 lib 目录下,解压过程中需要替换文件,输入y同意即可,

uzip neo4j-shell-tools_3.0.1.zip -d lib

这里写图片描述

启动

启动 neo4j-shell-tools 前必须将 Neo4j 程序关闭,然后才能使用 neo4j-shell-tools。
确认已经关闭 Neo4j 后,在 Neo4j 安装目录执行如下命令

./bin/neo4j-shell -path data/databases/graph.db

-path是要选择将要导出的数据库路径,默认数据库就存放在这个路径
这里写图片描述

查看输出、输入功能大概有以下几种
这里写图片描述

这里主要使用import-cypher功能将 Neo4j 中的数据导出为 CSV 格式数据。

导出数据

这里以导出 Neo4j 沙盒数据为例,Neo4j 沙盒数据申请及使用方法可以参考我之前博客:(1)Neo4j 沙盒实验申请使用过程,(2)Neo4j 沙盒数据导入到本地 Neo4j 数据库

Neo4j 沙盒数据部分节点的信息如下:
这里写图片描述

这里以一个关系(n)-[r]->(m)所包含的全部信息为一条信息,信息包含起始节点的 id、标签、每个属性,关系,终止节点的 id、标签、每个属性。
语法参考:https://github.com/jexp/neo4j-shell-tools/issues/23

to export all the nodes:

import-cypher -d”\t” -o out.csv MATCH (n) return id(n) as id, labels(n) as labels, n as props

to export all the nodes and their outgoing relationships and the target node:

import-cypher -d”\t” -o out.csv MATCH (n) OPTIONAL MATCH (n)-[r]->(m) return id(n) as start_id, id(r) as rel_id, type(r) as rel_typ, r as rel_props, id(m) as end_id

针对沙盒数据,具体执行语句为

neo4j-sh (?)$ import-cypher -o out10.csv MATCH(n) OPTIONAL MATCH(n)-[r]->(m) return id(n) as start_id,labels(n) as nlabels,n.name as nname,n.location as nlocation,n.ip as nip,n.size as nsize,n.zone as nzone,n.rack as nrack,n.ram as nram,n.disk as ndisk,n.id as nid,n.cpu as ncpu,n.type as ntype,n.versions as nversions,n.ports as nports,n.dependencies as ndependencies,type(r) as rel_type,id(m) as end_id,labels(m) as mlabels,m.name as mname,m.location as m.location, m.size as msize,m.zone as mzone,m.rack as mrack,m.ram as mram,m.disk as mdisk,m.id as mid,m.cpu as mcpu,m.type as mtype,m.versions as mversions,m.ports as mports,m.dependencies as mdependencies

看似内容很多,其实是因为节点属性类别很多,这里将他们都导出,作为一个字段,具体含义为:
import-cypher -o out10.csv导出数据基本语法,import-cypher -o即表示导出,原本示例语句中还有一个-d参数,是用来分割字段用的,选项是"\t",但加上这个参数会导致导出的数据分割混乱,发现去掉后数据规整了。

out10.csv是导出后保存数据的文件名,可以自定义,这是我测试的第10次,所以是out10.csv,导出的文件存放在 Neo4j 安装文件夹中,因为是在那里启动的 neo4j-shell-tools。

MATCH(n) OPTIONAL MATCH(n)-[r]->(m)这是查询节点和关系的语句,为后面的 return 字段做准备。

return id(n) as start_id,labels(n) as nlabels,n.name as nname...这一部分主要是提取起始节点的 id、标签以及各个属性值,可根据实际数据情况而定。

type(r) as rel_type这里是返回关系名称,只保留关系名,比如CONATIONS,如果使用r as rel_props则是完整的关系,比如(0)-[CONTAINS,352]->(267).

id(m) as end_id,labels(m) as mlabels,m.name as mname...与起始节点类似。

这里写图片描述

导出后的部分数据为
这里写图片描述
没有的属性值会自动空缺。

数据整理

导出的数据已经非常规整了,但可以观察到labels字段会有[ ],可以在Excel 中使用替换功能将其去掉。而且location字段中有逗号,因为 Excel 中保存的 CSV 格式默认是以逗号分隔的,在之后导入到 MySQL 数据库时需要利用这一特点将数据分开导入,所以这里为了避免混肴,也使用“替换”功能将其变为/
处理过的部分数据为
这里写图片描述

这样就可以直接导入 MySQL 数据库了,导入 MySQL 的具体过程可以参考我的博客MySQL LOAD DATA INFILE 导入 CSV 格式数据 。

参考资料:

1.jexp/neo4j-shell-tools: A bunch of import/export tools for the neo4j-shell:
https://github.com/jexp/neo4j-shell-tools

2.export-csv · Issue #23 · jexp/neo4j-shell-tools:
https://github.com/jexp/neo4j-shell-tools/issues/23

原创粉丝点击