【问题标题】:Importing CSV relations to Neo4j将 CSV 关系导入 Neo4j
【发布时间】:2016-04-03 20:42:34
【问题描述】:

我正在尝试将数据从 MySQL 数据库导入 Neo4j,使用 CSV 文件作为中介。我正在关注basic example,但无法让它正常工作。我正在使用这些查询导入两个表:

//Import projects.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/tmp/projects.csv" AS row
CREATE (:project
{
     project_id: row.fan,
     project_name: row.project_name
});

//Import people.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/tmp/persons.csv" AS row
CREATE (:person
{
     person_id: row.person_id,
     person_name: row.person_name,
});

//Create indicies.
CREATE INDEX ON :project(project_id);
CREATE INDEX ON :project(project_name);
CREATE INDEX ON :person(person_id);
CREATE INDEX ON :person(person_name);

这部分有效。当我尝试导入关系时不起作用:

//Create project-person relationships.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/tmp/project_persons.csv" AS row
MATCH (project:project {project_id: row.project_id})
MATCH (person:person {person_id: row.person_id})
MERGE (person)-[:CONTRIBUTED]->(project);

控制台接受查询没有错误,但永远不会完成。它已经以 100% 的 CPU、25% 的 RAM 运行了好几天,但磁盘使用率可以忽略不计。数据库信息中没有出现关系。

我是不是在某个地方出错了,还是真的这么慢? project_persons.csv 文件有 1300 万行长,但现在不应该定期提交显示吗?

【问题讨论】:

    标签: mysql csv neo4j cypher


    【解决方案1】:
    shouldn't the periodic commit make something show up by now?
    

    仅适用于 LOAD - 在 CREATE 的前面做一个“解释”,它会告诉你它是如何构建更新的以及它期望处理的记录数。我遇到了同样的问题——Neo4j 将整个更新作为一个事务进行,并且从未完成。交易需要分解为 50K - 100K tx 块才能完成所有工作。

    执行此操作的一种方法是将关系信息作为一组标记节点导入,然后使用这些节点 MATCH() 人员和项目节点并根据需要创建关系。

    USING PERIODIC COMMIT
    LOAD CSV WITH HEADERS FROM "file:/tmp/project_persons.csv" AS row
    CREATE (:Relations {project_id: row.project_id, person_id: row.person_id})
    

    然后处理50K批次的记录:

    MATCH (r:Relations) 
    MATCH (prj:project {project_id: r.project_id})
    MATCH (per:person {person_id: r.person_id})
    WITH r, prj, per LIMIT 50000
    MERGE (per)-[:CONTRIBUTED]->(prj)
    DELETE r
    

    多次运行,直到所有关系都创建完毕,然后就可以开始了。

    【讨论】:

    • 它可以工作,但是导入所有数据很乏味,即使我增加了限制。由于某种原因,我还有 20 万个关系,这些关系不会合并或删除。
    • 同意乏味。你在做什么来删除不需要的关系?
    • 我不知道如何处理它们,或者即使它们是不需要的。
    • 如果可行,请将其标记为答案,以便我获得一些代表分数。谢谢!
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2016-11-29
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多