使用CSV文件创建Neo4j数据库

使用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

我有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
如您所见,共同因素是生物体和动物的名称。每个
生物体
将有几个
,每个
将有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);