我有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的问题。我尝试了给出的答案(刷新浏览器缓存),但问题仍然存在。我在这里做错了什么?查询是否正确?这个问题还有另一个解决方案吗?任何帮助将不胜感激
答案 0 :(得分:2)
您的查询一次有两个问题:
MATCH
;你需要在那里使用MERGE
,这基本上就像你添加的创建唯一评论一样。我不知道您的特定错误消息的来源是什么,但正如所写,它看起来不像这些查询可能有效。以下是您重新制定的查询,以便它们可以正常工作(我在我的机器上使用您的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”。