簡體   English   中英

導入CSV關系到Neo4j

[英]Importing CSV relations to Neo4j

我正在嘗試使用CSV文件作為中介,將數據從MySQL數據庫導入Neo4j。 我正在遵循基本示例 ,但不能完全正常工作。 我正在使用這些查詢導入兩個表:

//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萬行,但是定期提交現在是否應該顯示出來?

shouldn't the periodic commit make something show up by now?

僅對於LOAD-在CREATE的前面做一個“解釋”,它會告訴您它如何構造更新以及它希望處理的記錄數。 我遇到了同樣的問題-Neo4j將整個更新作為一個事務進行,但從未完成。 事務需要分解成5萬至10萬個TX塊才能完成所有工作。

一種實現方法是將關系信息作為一組標記節點導入,然后使用這些節點來匹配人員和項目節點,並根據需要創建關系。

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

多次運行此操作,直到創建所有關系,然后您就可以開始了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM