Neo4j图数据库高级应用系列服务器扩展指南 APOC(5.2)导入CSV文件中的数据

    科技2025-07-20  18

    ​​​​​​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,京东、淘宝、当当均有售)。

     

    Processed: 0.011, SQL: 8