使用CSV文件创建Neo4j数据库
我有2个使用CSV文件创建Neo4j数据库,csv,neo4j,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,GGA
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
如您所见,共同因素是生物体和动物的名称。每个生物体
将有几个酶
,每个酶
将有1个基序
<代码>基序在酶之间可以相同。我使用以下语句创建数据库:
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?
这使我在使用周期提交时在第一行出现错误,该行表示无效输入“S”:应为。如果我去掉了ti,我得到的下一个错误是在创建和加载CSV之间需要WITH(第6行,第1列)
“匹配(o:organic{name:csvLine.name}),(m:Motif{name:csvLine.Motif})”
。我在谷歌上搜索了这个问题,这让我想到了这一点。我尝试了给定的答案(刷新浏览器缓存),但问题仍然存在。我做错了什么?这个问题正确吗?这个问题还有别的解决办法吗?非常感谢您的帮助您的查询同时有两个问题:
不能仅用“file1.csv”引用本地文件,因为neo4j需要一个URL
您正在使用MATCH
以防数据最初可能不存在;您需要在那里使用MERGE
,这与您添加的create unique注释基本相同
我不知道您的特定错误消息的来源是什么,但正如所写的,这些查询看起来不可能工作。以下是重新格式化的查询,以便它们能够正常工作(我使用您的CSV示例在我的机器上进行了测试)
注意这里的3个合并语句(merge
基本上是匹配的
+CREATE
,如果它还不存在),以及我使用了一个文件的事实:
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);
编辑我在生物体的名称
属性中添加了合并
。如果CSV中name
的值为空,则查询将失败。Coalesce保证,如果csvLine.name
为空,那么您将返回“No name”(无名称)。您使用的是什么版本的Neo4j?我使用的是2.1.3
版本使用定期提交时仍然显示错误。我去掉了它以查看查询是否有效,但它显示错误无法使用name
Ah的null属性值合并节点,因此错误消息表示CSV中的一个“name”值为null。将在一秒钟内更新答案…我在谷歌上搜索了这个问题,似乎创建质量节点通常会导致这个错误。我使用定期提交添加了,并重新运行了查询,现在错误更详细了:无法使用null属性值合并节点(处理第2行的URL“file:/Users/GAMER/Documents/Neo4j/csvs/name_enzyme.csv”时失败。似乎没有提交任何行。请注意,此信息可能不准确。)
我不确定我是否完全理解它作为文件路径的要求。它只要求URL吗?我使用了与您在回答中给出的格式完全相同的格式,但它说无法加载资源
。我的路径看起来像文件:Users/GAMER/Desktop/cypher/name\u enzyme.csv
让我们看看。
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);