当需要导入大量的数据时,可以使用neo4j自带的neo4j-admin import工具来进行批量导入,但是该种方式只能用来导入一个全新的数据库,也就是建库的时候来使用。该种导入方式的数据来源是csv文件,下面会具体通过实例来介绍整个的流程,
1、首先我们需要准备导入的csv文件
我们知道neo4j中的数据主要分为节点数据和关系数据,那么csv文件中也就分为节点文件和关系文件。
当系统要导入csv文件的时候,读取文件的第一行必需是数据域信息,用来表示该文件中各列的具体意思,当csv文件是节点文件的时候,必要要包含的是ID域(:ID),用来表示节点的id信息,当csv文件是关系文件的时候,必需包含的是(:START_ID),(:END_ID),(:TYPE)分别用来表示关系的开始节点id,结束节点id和关系类型。
图1是节点csv文件的数据域信息,数据域的定义方式<name>:<ID/type>,这里定义了3个属性,其中movieId是之后用来创建关系的id, :LABEL是可选项,用来对节点来进行标记,当一个节点有多个标签的时候,可以采用;来进行分割,例如:电影;喜剧。
图2是节点csv文件的具体数据信息,这里需要注意的就是数据域和数据的对应关系,并且ID域中的信息必需是全局唯一的,这个全局唯一后面会进一步讲解。这样我们就准备好了电影节点csv文件。
类似,图3是演员节点csv文件的数据域和数据。 图5是关系csv文件的数据域,数据域必需包含(:START_ID),(:END_ID),(:TYPE)这三个,分别用来表示开始节点、结束节点和类型。 图6是关系csv文件的具体数据信息。 这里需要注意,数据的头和内容可以分别写在两个不同的csv文件中,也可以写在一个文件中,当一个头信息只是对应一个内容信息的时候,可以考虑写在一个文件,当一个头信息对应多个内容信息文件的时候,可以考虑将头文件放在一个单独的文件中。我这里是将头文件和内容文件分开来表示。
2、将数据导入到数据库中
导入数据的具体命令如下:
neo4j-admin import [–mode=csv] [–database=<name>]
[–additional-config=<config-file-path>]
[–report-file=<filename>]
[–nodes[:Label1:Label2]=<“file1,file2,…”>]
[–relationships[:RELATIONSHIP_TYPE]=<“file1,file2,…”>]
[–id-type=<STRING|INTEGER|ACTUAL>]
[–input-encoding=<character-set>]
[–ignore-extra-columns[=<true|false>]]
[–ignore-duplicate-nodes[=<true|false>]]
[–ignore-missing-nodes[=<true|false>]]
[–multiline-fields[=<true|false>]]
[–delimiter=<delimiter-character>]
[–array-delimiter=<array-delimiter-character>]
[–quote=<quotation-character>]
[–max-memory=<max-memory-that-importer-can-use>]
[–f=<File containing all arguments to this import>]
[–high-io=<true/false>]
这里我还是通过例子来讲解:
目前我手头的文件包括:
—movieNode_header.csv电影节点头文件
—movieNode.csv电影节点内容文件
—personNode_header.csv演员节点头文件
—personNode.csv演员节点内容文件
—relationshipPM_header.csv关系头文件
—relationshipPM.csv关系文件
所有的文件我放在import目录中,采用命令:
neo4j-admin import --database=graph01.db --nodes “import/movieNode_header.csv,import/movieNode.csv” --nodes “import/personNode_header.csv,import/personNode.csv” --relationships “import/relationshipPM_header.csv,import/relationshipPM.csv” --multiline-fields=true
其中:
–database=graph01.db代表我要建立的数据库的名字为graph01.db,这里需要注意,graph01.db必需为全新的,如果该库已经存在的情况下,会无法导入。
–nodes代表要导入的文件为节点文件,当有多个导入文件的时候,使用,来进行隔开,当如果头文件是单独文件的时候,必需将其放在内容文件的前面,否则会无法导入。
—relationships代表要导入的文件为关系文件,当有多个关系文件导入的时候,使用,来进行隔开,当如果头文件是单独文件的时候,必需将其放在内容文件的前面,否则会无法导入。
–multiline-fields=true代表如果某属性中的数据内容有多行时,可以成功导入。
如图提示,导入成功。
3、通过浏览器查看导入的数据
启动数据库,通过浏览器查看导入的数据情况,可以看出,数据已经全部导入成功了。 4、注意事项:
4.1、:ID字段的内容在全部导入文件中不能有任何的重复。
4.2、该导入方式适合大规模数据的初始化建库,如果是要增量数据导入或者数据规模不大,可以考虑其他的导入方式。可以看到,对于1000多万个节点,导入也就2分钟不到的时间。
作者:玻璃瓶外的水 链接:https://www.jianshu.com/p/3acbf66bd0d0