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

2023-12-27

我正在考虑用 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、属性_A、属性_B 等...

Story: ID、属性_x、属性_y

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

如果不明显,ID 为 3 的人物与 ID 为 42 的故事之间的链接将在链接表 ID=autoincrement、FromTable=Person、FromID=3、ToTable=Story、ToID=42 中拥有一行。 尽管我使用术语“来自”和“至”,但实际链接在实践中并不是真正“定向”的。

我看过迈克尔·饥饿的批量导入 https://github.com/jexp/batch-import但这似乎只适用于单个节点表和一个关系表,而我希望导入三种不同类型的节点以及它们之间的一个关系列表。

我已经启动并运行了 neo4j, 任何帮助我开始的建议将不胜感激。

我不熟悉 Java,但我确实使用 Python 和 bash shell 脚本。 初始导入后,我将使用带有 Javascript 的 RESTful 界面。


根据建议在 git 仓库中 https://github.com/jexp/batch-import/issues/4。使用迈克尔·饥饿的批量导入 https://github.com/jexp/batch-import可以从一个 .csv 文件导入多种节点类型。 引用迈克尔的话:

只需将它们全部放入一个节点文件中,您可以拥有任何属性而不是 在某一行中有一个值,那么它将被跳过。

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

将所有节点表组合成一个新表,称为nodes:

  1. 创建一个新表nodes具有自动递增功能newID场和一个type场地。 type字段会记录节点数据来自哪个表
  2. 添加允许空值的 3 个节点表中所有可能的列名称。
  3. INSERT INTO nodes的值来自Person, then Organism, then Story,除了设置type领域到人、有机体或故事。将任何不相关的字段留空。

在另一个新表中rels添加新创建的newID索引到Links基于sql的表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;

然后导出这两个新表nodes and rels作为制表符分隔的 .csv 文件,并将它们与批量导入一起使用:

$java -server -Xmx4G -jar target/batch-import-jar-with-dependencies.jar target/graph.db nodes.csv rels.csv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 CSV / MySQL 数据初始批量导入 Neo4j 数据库 的相关文章