使用CSV文件创建Neo4j数据库

时间:2014-09-29 00:26:39

标签: csv neo4j

我有2个CSV个文件,我想将其转换为Neo4j数据库。它们看起来像这样:

第一个文件:

name,enzyme
Aminomonas paucivorans,M1.Apa12260I
Aminomonas paucivorans,M2.Apa12260I
Bacillus cellulosilyticus,M1.BceNI
Bacillus cellulosilyticus,M2.BceNI

second file 

name,motif
Aminomonas paucivorans,GGAGNNNNNGGC
Aminomonas paucivorans,GGAGNNNNNGGC
Bacillus cellulosilyticus,CCCNNNNNCTC

正如你所看到的,共同因素是有机体的Name和。每个Organism将有一些Enzymes,每个Enzyme将有一个Motif。酶之间的Motifs可以相同。我使用以下语句来创建我的数据库:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file1.csv" AS csvLine
MATCH (o:Organism { name: csvLine.name}),(e:Enzyme { name: csvLine.enzyme})
CREATE (o)-[:has_enzyme]->(e) //or maybe CREATE UNIQUE?

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file2.csv" AS csvLine
MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})
CREATE (o)-[:has_motif]->(m) //or maybe CREATE UNIQUE?

这会在USING PERIODIC COMMIT的第一行显示Invalid input 'S': expected时出现错误。如果我摆脱了ti,我得到的下一个错误是WITH is required between CREATE and LOAD CSV (line 6, column 1) "MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})"。我用谷歌搜索了这个导致我answer的问题。我尝试了给出的答案(刷新浏览器缓存),但问题仍然存在。我在这里做错了什么?查询是否正确?这个问题还有另一个解决方案吗?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您的查询一次有两个问题:

  1. 您不能仅使用“file1.csv”引用本地文件,因为neo4j需要一个URL
  2. 如果数据最初可能不存在,您正在使用MATCH;你需要在那里使用MERGE,这基本上就像你添加的创建唯一评论一样。
  3. 我不知道您的特定错误消息的来源是什么,但正如所写,它看起来不像这些查询可能有效。以下是您重新制定的查询,以便它们可以正常工作(我在我的机器上使用您的CSV样本进行了测试)

    USING PERIODIC COMMIT
    LOAD CSV WITH HEADERS FROM "file:/home/myuser/tmp/file1.csv" AS csvLine
    MERGE (o:Organism { name: coalesce(csvLine.name, "No Name")})
    MERGE (e:Enzyme { name: csvLine.enzyme})
    MERGE (o)-[:has_enzyme]->(e);
    

    请注意这里3个合并语句(MERGE基本上MATCH + CREATE如果它尚不存在),以及我使用file:的事实URL。

    第二个查询基本上以相同的方式制定:

    USING PERIODIC COMMIT
    LOAD CSV WITH HEADERS FROM "file:/home/myuser/tmp/file2.csv" AS csvLine
    MERGE (o:Organism { name:  coalesce(csvLine.name, "No Name")})
    MERGE (m:Motif { name: csvLine.motif})
    MERGE (o)-[:has_motif]->(m);
    

    编辑我在Organism的coalesce媒体资源中添加了name。如果CSV中的name为空值,则查询将失败。 Coalesce保证如果csvLine.name为空,那么您将返回“No Name”。