【发布时间】:2015-09-08 21:40:45
【问题描述】:
我知道Import tool,但就我而言,我必须阅读一行并将其分解为节点和关系。使用带有索引的定期提交的加载 csv 查询,导入 200 万行需要 12 多个小时。有没有办法让我使用上述工具而不必将 csv 预处理为节点和关系?
以下是我使用的示例查询
CREATE INDEX ON :Patient(mrno);
CREATE INDEX ON :Location(city);
CREATE INDEX ON :Department(id);
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///home/geralt/Desktop/Temp_Admission.csv" AS line
WITH line,
(CASE WHEN line.MRNo='' OR line.MRNo='null' THEN "BLEH" ELSE line.MRNo END, "NA") AS mrn,
(CASE WHEN line.ID_Admit='' OR line.ID_Admit='NULL' THEN -1 ELSE line.ID_Admit END,0) AS ID_Admit,
(CASE WHEN line.DeptCode_Admit='' OR line.DeptCode_Admit='NULL' THEN -1 ELSE line.DeptCode_Admit END,0) AS DeptCode_Admit,
(CASE WHEN line.City='' OR line.City='NULL' THEN "BLEH" ELSE line.City END,"NA") AS city
MERGE (p:Person { mrn: mrn}) ON MATCH SET p.DOB=line.DateOfBirth,p.gender=line.GenderDescription,p.prefix=line.PrefixDescription ON CREATE SET p.DOB=line.DateOfBirth,p.gender=line.GenderDescription,p.prefix=line.PrefixDescription
CREATE (a:Admission{HospitalName:line.Hospital,id:toInt(ID_Admit),unitId:line.UnitID_Admit,IPDNo:line.IPDNO,DateOfAdmission:line.Date_Admit})
MERGE(d:Department{id:toInt(DeptCode_Admit)}) ON MATCH SET d.name=line.DeptName_Admit
MERGE(l:Location{city:city}) ON MATCH SET l.country=line.Country,l.state=line.State
merge p-[:Admitted]->a
MERGE a-[:Located]->l
【问题讨论】:
-
您的查询计划是什么样的?您是否尝试将其拆分为多个加载 csv 运行?无论如何,我过去也遇到过类似的问题。我能够使用 shell-tools 和 import-cypher ... github.com/jexp/neo4j-shell-tools... import-cypher -i /home/geralt/Desktop/Temp_Admission.csv -b 1000 然后你的密码语句来解决它。 . 您可能希望将其拆分为多个运行...
-
乍一看,处理空值似乎是 shell-tools 的一个问题。不是吗?我会详细研究这个