【问题标题】:Loading data in Neo4j from csv从 csv 加载 Neo4j 中的数据
【发布时间】:2014-11-02 16:41:25
【问题描述】:

我正在从多个 csv 文件迭代上传节点和边,每个节点类型一个。加载节点效果很好,但加载边缘并不总是有效。事实上,一些节点有数字作为标识符——如果是这样,那么该类型的所有节点都有数字——但是作为字符串加载,因此创建边失败。手动创建一个边,添加用双引号括起来的标识符效果很好。

如何在创建节点时强制 LOAD CSV 对这些标识符使用数字,或强制 LOAD CSV 用双引号将标识符括起来?

文章节点:

Type    PMID    ArticleTitle    AbstractText    Date    Pages
Article 25358116    Synthesis of... Abstract    2014-10-30  
Article 25358093    Putting theory...   In this study...    2014-10-30  e1003910

问题节点:

Type    Name    Year    Month   Volume  Issue
Issue   J. Med. Chem., 2014 2014    Oct     
Issue   PLoS Comput. Biol., 2014, 10, 10    2014    Oct 10  10
Issue   PLoS ONE, 2014, 9, 10   2014        9   10

边缘:

Name    PMID
J. Med. Chem., 2014 25358116
PLoS Comput. Biol., 2014, 10, 10    25358093

密码命令:

CREATE INDEX ON :Article(PMID);
LOAD CSV WITH HEADERS FROM 'article.nodes' as csvLine FIELDTERMINATOR '\t' CREATE (:Article { PMID: toInt(csvLine.PMID), Title: csvLine.ArticleTitle, Date: csvLine.Date, Pages: csvLine.Pages, AbstractText: csvLine.Abstract })  return count(*);
CREATE INDEX ON :Journal(Abbreviate);
CREATE INDEX ON :Issue(Name);
LOAD CSV WITH HEADERS FROM 'issue.nodes' as csvLine FIELDTERMINATOR '\t' CREATE (:Issue { Name: csvLine.Name, Volume: csvLine.Volume, Issue: csvLine.Issue, Year: csvLine.Year, Month: csvLine.Month})  return count(*);
LOAD CSV WITH HEADERS FROM 'article.edges' as csvLine FIELDTERMINATOR '\t' MATCH (src:Issue { Name: csvLine.Name }), (tgt:Article { PMID: toInt(csvLine.PMID) }) CREATE (src) -[:hasArticle]-> (tgt) return count(*);

【问题讨论】:

    标签: csv upload neo4j cypher


    【解决方案1】:

    收到您的文件后,TSV 出现格式问题。

    在 neo4j 中整体显示 csvLine 显示问题名称为空,因此我修改了格式并使用谷歌驱动器重新导出文件。

    您还可以检查 CsvLINT http://csvlint.io/validation/545681456373761303020000 上的错误

    LOAD CSV WITH HEADERS FROM 'file:///Users/ikwattro/dev/playbox/pierre/article.edges' as csvLine FIELDTERMINATOR '\t' WITH csvLine LIMIT 10 RETURN csvLine 
    I get this
    Name PMID   J. Med. Chem., 2014 25358116 
    Name PMID  PLoS Comput. Biol., 2014, 10, 10 
    Name PMID  J. Med. Chem., 2014 
    Name PMID  J. Med. Chem., 2014
    Name And PMID Are under the same key
    

    克里斯

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢。但是我仍然有问题。我强制对文章节点的 PMID 进行编号并检查它们是否为数字,在 LOAD CSV WITH HEADERS FROM 'article.edges' as csvLine FIELDTERMINATOR '\t' MATCH (src:Issue (src:Issue { Name: csvLine.Name }), (tgt:Article { PMID: toInt(csvLine.PMID )}) CREATE (src) -[:hasArticle]-> (tgt) return count(*)
      • 另外,在创建节点和匹配节点以创建关系时,在两边都使用 toInt
      • 这就是我正在做的:从 'article.nodes' 作为 csvLine FIELDTERMINATOR '\t' 加载带有标题的 CSV (:Article { PMID: toInt(csvLine.PMID), Title: csvLine. ArticleTitle,日期:csvLine.Date,页面:csvLine.Pages,AbstractText:csvLine.Abstract }) return count();将带有标题的 CSV 从“article.edges”加载为 csvLine FIELDTERMINATOR '\t' MATCH (src:Issue { Name: csvLine.Name }), (tgt:Article { PMID: toInt(csvLine.PMID)}) CREATE (src) -[:hasArticle]-> (tgt) 返回计数();在控制台中,以下密码有效: match (a:Article {PMID: 25358116}) return a;
      • 你能从节点和边 csv 中提供 2 行吗?如果不是保密的?
      • 键入 PMID 文章标题 AbstractText 日期页面文章 25358116 综合... 摘要 2014-10-30 文章 25358093 放... 最近... 2014-10-30 e1003910
      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多