【问题标题】:How to do an initial batch import of CSV / MySQL data into neo4j database如何将 CSV / MySQL 数据初始批量导入 Neo4j 数据库
【发布时间】:2012-09-12 09:20:16
【问题描述】:

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

关系数据库由 4 个表组成:PersonOrganismStoryLinks。 链接描述了其他 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 的故事之间的链接将在链接表 ID=autoincrement、FromTable=Person、FromID=3、ToTable=Story、ToID= 中有一行42. 即使我使用“从”和“到”这两个术语,实际链接在实践中并不是真正的“定向”。

我查看了 Michael Hunger 的 batch-import,但这似乎只适用于单个节点表和一个关系表,而我希望导入三种不同类型的节点和它们之间的一个关系列表。

我已经启动并运行了 neo4j, 任何让我入门的建议将不胜感激。

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

【问题讨论】:

    标签: database import converter neo4j graph-databases


    【解决方案1】:

    根据in the git repo 的建议。使用 Michael Hunger 的 batch-import 可以从一个 .csv 文件中导入多种节点类型。 引用迈克尔的话:

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

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

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

    1. 使用自动递增的newID 字段和type 字段创建一个新表nodes。 type字段会记录节点数据来自哪个表
    2. 从允许空值的 3 个节点表中添加所有可能的列名。
    3. INSERT INTO nodes 的值来自 Person,然后是 Organism,然后是 Story,此外还可以将 type 字段设置为人物、有机体或故事。将所有不相关的字段留空。

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

    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;
    

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

    $java -server -Xmx4G -jar target/batch-import-jar-with-dependencies.jar target/graph.db nodes.csv rels.csv
    

    【讨论】:

    【解决方案2】:

    正如您所说,您很高兴使用 python 和 shell 脚本,您可能还想看看py2neo 附带的命令行工具,特别是geoff。这使用了我为保存图形数据而放在一起的平面文件格式,因此在您的实例中,您需要从源数据构建一个平面文件并将其插入到您的图形数据库中。

    文件格式和服务器插件记录在here,客户端应用程序的py2neo模块是here

    如果文档中缺少任何内容,或者您​​想了解更多信息,请随时给我发电子邮件

    奈杰尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多