Neo4j 数据导出为 CSV 格式

本文介绍如何使用neo4j-shell-tools将Neo4j数据库中的数据导出为CSV格式,以便进一步导入到MySQL数据库中。包括安装配置工具、执行导出命令及数据整理等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要介绍将 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

### 如何从 Neo4j 导出数据CSV 文件 要将 Neo4j 数据库中的数据导出CSV 格式,可以使用多种方法实现。以下是基于 Cypher 查询语言以及 APOC 插件的功能来完成这一任务的具体说明。 #### 使用 APOC 插件导出数据 APOC 是 Neo4j 的一个扩展插件,提供了丰富的工具集用于处理复杂任务,其中包括数据导出功能。为了通过 APOC 将数据导出CSV 文件,需按照以下方式操作: 1. **确认 APOC 安装成功** 需要在 Neo4j 中验证 APOC 是否已正确安装并可用。可以通过执行以下查询命令来进行测试: ```cypher RETURN apoc.version(); ``` 如果返回了版本信息,则表明 APOC 已经正常加载[^3]。 2. **编写导出语句** 利用 `CALL apoc.export.csv` 方法可轻松完成数据导出工作。例如,如果希望将整个数据库的内容保存至名为 `daochu.csv` 的文件中,并设置特定选项(如不带引号),则应运行如下脚本: ```cypher CALL apoc.export.csv.all('daochu.csv', {quotes:'none', useTypes:true}); ``` 此处参数解释如下: - `'daochu.csv'`: 输出的目标文件名称; - `{quotes:'none'}`: 控制字段是否被双引号包裹; - `{useTypes:true}`: 表明是否保留节点和关系类型的元信息。 3. **注意事项** 在实际应用过程中需要注意几点事项以避免潜在错误发生: - 确保 Neo4j 实例具有写入指定路径的权限; - 若遇到警告提示,通常不会影响最终结果但仍建议查阅官方文档排查原因。 #### 替代方案——利用 Import/Export 功能 除了借助第三方插件外,Neo4j 自身也支持基本形式的数据交换机制。对于简单场景而言,可以直接采用内置命令行工具或者图形界面下的 export 功能获取所需资料[^1]。 ```bash neo4j-admin database dump my-database --to=/path/to/dump-file.dump ``` 上述例子展示了如何创建一个完整的数据库转储副本;然而它并非直接生成纯文本格式的结果集,因此可能需要进一步转换才能满足具体需求。 --- ### 示例代码片段展示 假设仅关注部分结构化信息而非全部内容时,还可以自定义查询范围限定输出项。比如只提取某些标签对应的实体记录及其关联属性值列表: ```cypher MATCH (n:Person)-[r]->(m) RETURN n.name AS Name, type(r) as RelationshipType, m.title as MovieTitle LIMIT 10; ``` 接着调用相应函数将其序列化成目标形态存储下来即可。 ```cypher CALL apoc.export.csv.query( "MATCH (n:Person)-[r]->(m) RETURN n.name AS Name, type(r) as RelationshipType, m.title as MovieTitle LIMIT 10", 'people_movies_exported.csv', {} ); ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值