neo4j中数据导入——neo4j-admin批量导入

当需要导入大量的数据时,可以使用neo4j自带的neo4j-admin import工具来进行批量导入,但是该种方式只能用来导入一个全新的数据库,也就是建库的时候来使用。该种导入方式的数据来源是csv文件,下面会具体通过实例来介绍整个的流程,

1、首先我们需要准备导入的csv文件

我们知道neo4j中的数据主要分为节点数据和关系数据,那么csv文件中也就分为节点文件和关系文件。

当系统要导入csv文件的时候,读取文件的第一行必需是数据域信息,用来表示该文件中各列的具体意思,当csv文件是节点文件的时候,必要要包含的是ID域(:ID),用来表示节点的id信息,当csv文件是关系文件的时候,必需包含的是(:START_ID),(:END_ID),(:TYPE)分别用来表示关系的开始节点id,结束节点id和关系类型。

图1是节点csv文件的数据域信息,数据域的定义方式:,这里定义了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=]

                            [--additional-config=]

                            [--report-file=]

                            [--nodes[:Label1:Label2]=<"file1,file2,...">]

                            [--relationships[:RELATIONSHIP_TYPE]=<"file1,file2,...">]

                            [--id-type=]

                            [--input-encoding=]

                            [--ignore-extra-columns[=]]

                            [--ignore-duplicate-nodes[=]]

                            [--ignore-missing-nodes[=]]

                            [--multiline-fields[=]]

                            [--delimiter=]

                            [--array-delimiter=]

                            [--quote=]

                            [--max-memory=]

                            [--f=]

                            [--high-io=]


这里我还是通过例子来讲解:

目前我手头的文件包括:

---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分钟不到的时间。


你可能感兴趣的:(neo4j中数据导入——neo4j-admin批量导入)