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
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权威指南》