1. 定义
CSV是最常用的数据交换格式,被各类应用广泛使用。Neo4j提供IMPORT数据导入命令行工具(neo4j-admin import,只能离线使用),以及在Cypher中提供LOAD CSV来实现从CSV文件中导入数据到数据库中。
APOC的CSV导入过程则提供了更丰富的特性:
为每行增加了行号为每行提供了MAP和LIST两种数据表示自动的数据类型转换(包含分解列表到数组)保持字串原始格式的选项忽略字段的选项没有标题的文件替换特定内容为空NULL 可以直接导入ZIP后的CSV文件2. 过程调用接口 – apoc.load.csv
过程接口
CALL apoc.load.csv( file,
{configuration}
)
参数名
类型
缺省值
可为空?
说明
file
字符串
无
否
导入的CSV文件名。
{configuration}
MAP
有
是
导出配置选项。参见下面各行。
arraySep
字符串
分号”;”
是
数组内容的分隔符。
header
布尔值
true
是
文件是否包含标题行。
ignore
数组
[]
是
要忽略的列/字段。
limit
正整数
逗号”,”
是
处理的行数限制。
mapping
MAP
{}
是
字段映射规则,具体格式见下面的表格。
nullValues
数组
[]
是
转换成NULL处理/忽略的值,例如['na', false]
quoteChar
字符串
双引号(")
是
字段值使用的引号
sep
字符串
逗号”,”
是
数据项分隔符
skip
正整数
无
是
要忽略的行数。
mapping字段映射规则格式:
名称
缺省值
说明
type
无
'int','string'等
array
false
表示字段是否为数组
arraySep
';'
数组分隔符
name
无
重命名属性
ignore
false
忽略/删除此字段
nullValues
[]
哪些值被视为null,例如 ['na',false]
mapping的内容举例如下:
mapping:{ name: {type: 'string', name: 'fullname'}, age: {type: 'int'}, hobits:{array: true,arraySep: ';'}, genre: {type: 'string', nulValues: ['na','unknown','x']}, col: {ignore: true} }在导入较大数据文件时,使用LOAD CSV时通常需要在前面加上USING PERIODIC COMMIT n来指定每个事务的批次大小(正整数n)、以避免JVM内存溢出。类似的,使用APOC的load.csv()过程,可以和任务管理过程(参见这里)相结合达到相同的效果:
CALL apoc.periodic.iterate( 'CALL apoc.load.csv( {url} ) YIELD map AS row RETURN row', 'CREATE (p:Person) SET p = row', { batchSize:10000, iterateList:true, parallel:true } );如果希望了解更多APOC过程,请参考《Neo4j图数据扩展指南》(清华大学出版社,2020,京东、淘宝、当当均有售)。