如何将CSV/MySQL数据初始批量导入neo4j数据库

joh*_*wie 5 database import converter neo4j graph-databases

我正在考虑用neo4j数据库替换MySQL数据库.我是neo4j的初学者,想知道如何将当前MySQL数据批量插入到neo4j数据库中,这样我就可以进行实验并开始学​​习neo4j.

关系数据库包括4个表:Person,Organism,Story,Links.链接描述其他3个表中的行之间的关系.

Links:ID,FromTable,FromID,ToTable,ToID,LinkType

Person:ID,property_2,property_1等...

Organism:ID,property_A,property_B等....

Story:ID,property_x,property_y

每个ID字段是一个自动递增的整数,从每个表的1开始

如果不明显,ID为3的人和ID为42的故事之间的链接将在Links表ID = autoincrement,FromTable = Person,FromID = 3,ToTable = Story,ToID = 42中有一行.即使我使用"来自"和"来"这些术语,实际的链接并不是真正的"指导".

我看过Michael Hunger的批量导入,但这似乎只适用于单个节点表和一个关系表,而我希望导入三种不同类型的节点和一个关系列表.

我有neo4j启动和运行,任何建议让我开始将非常感激.

我不熟悉Java,虽然我使用Python和bash shell脚本.初始导入后,我将使用带有Javascript的RESTful接口.

joh*_*wie 9

根据git repo中的建议.使用Michael Hunger的批量导入,可以从一个.csv文件导入多个节点类型.引用迈克尔:

只需将它们全部放入一个节点文件中,就可以使任何属性在某一行中没有值,然后就可以跳过它.

所以我使用的一般方法是:

将所有节点表组合成一个名为的新表nodes:

  1. nodes使用自动递增newID字段和type字段创建新表.type字段将记录节点数据来自哪个表
  2. 添加3个节点表中允许空值的所有可能的列名称.
  3. INSERT INTO nodes从价值观Person,那么Organism,那么Story,除了设置type场人,生物,或故事.将任何不相关的字段留空.

在另一个新表中,基于sql rels将新创建的newID索引添加到Links表中JOIN:

INSERT INTO rels
SELECT  
    n1.newID AS fromNodeID, 
    n2.newID AS toNodeID,
    L.LinkType,
    L.ID
FROM 
    Links L
LEFT JOIN 
    nodes n1 
    ON 
    L.fromID = n1.ID 
    AND 
    L.fromType = n1.type
LEFT JOIN 
    nodes n2 
    ON 
    L.toID = n2.ID 
    AND 
    L.toType = n2.type;
Run Code Online (Sandbox Code Playgroud)

然后导出这两个新表nodesrelsTab分离的.csv文件,并将它们与批量导入一起使用:

$java -server -Xmx4G -jar target/batch-import-jar-with-dependencies.jar target/graph.db nodes.csv rels.csv
Run Code Online (Sandbox Code Playgroud)