NEO4J-导入CSV文件

5,098 阅读3分钟

1 使用Load CSV指令导入到neo4j

neo4j提供了Load CSV命令帮助我们将CSV数据文件导入到Neo4j中,下面给出几个读取CSV文件,但不存入数据库的例子。

1.1 简单导入CSV数据

Load CSV读取但不存入数据库:

  • 查看前CSV文件行数
LOAD CSV FROM "file-url" AS line
RETURN count(*);
  • 查看前CSV文件前5行
LOAD CSV FROM "file-url" AS line WITH line
RETURN line
LIMIT 5;
  • 查看前CSV文件,并带有头部数据
LOAD CSV WITH HEADERS FROM "file-url" AS line WITH line
RETURN line
LIMIT 5;

说明:

  • LOAD CSV FROM "file-url" AS line将指定路径下的CSV文件读取出来,其中"file-url"就是文件的地址,可以是本地文件路径也可以是网址,只要能从地址中读取到CSV文件即可。
  • 如果把CSV文件放置在neo4j系统路径的import文件夹内,就不需要指定CSV文件路径。

上述方法仅仅是用来读取CSV文件,它并没有将数据存入到数据库中,要导入到neo4j数据库中需要使用CREATE语句。

下例可以读取网址中的movie.csv文件并批量创造节点Movie,每个节点的title、released和tagline属性由导入的CSV文件的每行指定。

LOAD CSV FROM 'http://we-yun.com/neo4jguide/movie.csv' AS line 
CREATE (:Movie {title:line[0], released:line[1], tagline:line[2]})

执行成功后,在结果显示区可以看到创建节点的数量:

然后用以下语句查看数据库内是否已经有导入的数据了:

MATCH (n:Movie) RETURN n

如上图所示,这说明已经导入数据成功。

1.2 导入CSV时附带表头

LOAD CSV WITH HEADERS FROM 'http://we-yun.com/neo4jguide/tracks.csv' AS line 
CREATE (:Track {TrackId:line.Id, Name:line.Track, Length:line.Length})

上述语句添加了 WITH HEADERS 子句,它的功能就是在导入CSV时附带上头部,头部由line.Id、line.Track指定。执行指挥可以用下面语句查看:

MATCH (n:Track) RETURN n

可以看到,每个数据元素都带有TrackId、Name、Length头部元素。

1.3 导入自定义分隔符的CSV文件

CSV文件的分隔符有时候不是逗号,而是其他分隔符。这时,可以使用FIELDTERMINATOR来指定。

如:

查询:

LOAD CSV FROM 'http://neo4j.com/docs/developer-manual/3.1/csv/artists-fieldterminator.csv' AS line FIELDTERMINATOR ';'
CREATE (:Artist { name: line[1], year : toInt(line[2])})

本例中字段之间以分号分隔,因此,在LOAD CSV中使用了 FIELDTERMINATOR 自定义分隔符。

1.4 导入CSV大文件

如果要导入包含大量数据的CSV文件,则可以使用USING PERODIC COMMIT子句。

使用USING PERODIC COMMIT指示neo4j在执行完一定行数后提交数据再继续,这样减少了内存开销。

使用USING PERODIC COMMIT默认值为1000行,因此数据将每一千行提交一次。

要使用USING PERODIC COMMIT,只需在LOAD CSV语句前插入USING PERODIC COMMIT语句,具体使用方法如下:

USING PERODIC COMMIT
LOAD CSV WITH HEADERS FROM 'http://we-yun.com/neo4jguide/tracks.csv' AS line 
CREATE (:Track {TrackId:line.Id, Name:line.Track, Length:line.Length})

也可以改变默认单次提交行数,如改为800:

USING PERODIC COMMIT 800
LOAD CSV WITH HEADERS FROM 'http://we-yun.com/neo4jguide/tracks.csv' AS line 
CREATE (:Track {TrackId:line.Id, Name:line.Track, Length:line.Length})

1.5 导入包含转义字符的数据

本例中同时包含了引用字符和转义字符。

artists-with-escaped-char.csv
"1","The",""Symbol""","1992"

查询:

LOAD CSV FROM 'http://neo4j.com/docs/developer-manual/3.1/csv/artists-with-escaped-char.csv' AS line
CREATE (:Artist { name: line[1], year : toInt(line[2])})
RETURN a.name AS name, a.year AS year, length(a.name) AS length

这里的字符串用双引号括起来,同时关注本例中字符串的长度。

结果:

name year length
"The"Symbol"" 1992 12

2 使用neo4j-import工具导入到neo4j

从neo4j2.2版本开始,系统就自带了一个大数据量的导入工具:neo4j-import,可支持并行、可扩展的大规模CSV数据导入。

由于neo4j-import工具不能使用Cypher语句创建节点、关系,所以需要为节点和关系分别提供不同的CSV文件。

参考资料:《Neo4j权威指南》