【问题标题】:How to import data from csv file如何从 csv 文件中导入数据
【发布时间】:2017-10-14 05:37:30
【问题描述】:

我是 neo4j 的新手,我正在尝试从两个 csv 文件导入数据,但我做不到。 这两个 csv 文件的结构如下:

master.csv:

ID    NAME    LASTNAME     COLLEGE
01    aaa     bbb          ABC
02    xxx     yyy          BCE

award.csv:

playerID    award                  year
01          best_player            2010
01          rookie_of_the_year     2011
02          best_player            2012

如何为玩家和奖励创建节点以及如何连接它们?

我尝试使用此代码:(但显然它不起作用)

CREATE CONSTRAINT ON (a:PLAYER) ASSERT a.id IS UNIQUE;

CREATE CONSTRAINT ON (b:AWARD) ASSERT b.award IS UNIQUE;

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "File:///master.csv" as line fieldterminator ';'
CREATE (:PLAYER {id:line.playerID, name:line.firstName, lastName:line.lastName});

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "File:///award.csv" as line fieldterminator ';'
MATCH (player:Player {id:line.playerID})
MERGE (award:AWARD {award:line.award})
CREATE (player)-[r:won]->(award)
set r += {year:line.year}

如果我还要为大学添加节点,对吗?

CREATE CONSTRAINT ON (c:COLLEGE) ASSERT c.name IS UNIQUE;

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///master.csv" as line fieldterminator ';'
WITH line
MATCH (player:PLAYER {id:line.playerID})
MERGE (college:COLLEGE {name:line.college}})
CREATE (player)-[:studied]->(college)

谢谢

【问题讨论】:

  • * ...比赛(玩家:球员)...
  • 一切看起来都很好,问题可能是您尝试在单个事务中运行它...您必须在单独的事务中创建每个约束,然后分别运行第一个 LOAD CSV 和第二个跨度>
  • 是的,我分别运行每个查询。可能是 csv 文件的问题?

标签: csv import neo4j


【解决方案1】:

据我所知,主要是在您的陈述中使用正确的 CASE/case/Case。根据您显示的输入,我想出了这个(为我工作):

CREATE CONSTRAINT ON (a:PLAYER) ASSERT a.id IS UNIQUE;
CREATE CONSTRAINT ON (b:AWARD) ASSERT b.award IS UNIQUE;

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///master.csv" as line fieldterminator ';'
CREATE (:PLAYER {id:line.bioID, name:line.firstName, lastName:line.lastName});

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///award_players.csv" as line fieldterminator ';'
WITH line
MATCH (player:PLAYER {id:line.playerID})
MERGE (award:AWARD {award:line.award})
CREATE (player)-[r:won]->(award)
SET r += {year:line.year};

希望这会有所帮助,汤姆

【讨论】:

  • 首先感谢您回答我,但是当我运行第二个命令时,它会返回以下内容:(无更改,无记录)
  • 您能否分享输入文件的实际内容(标题和前几行都可以)(上面不能是它们,因为您声明您使用 ; 作为分隔符)。如果有任何不同的情况,它将不起作用。
  • 是的,当然,两个文件的格式相同。 dropbox.com/s/mgjcsh6b7k9v63c/award_players.csv?dl=0 我也尝试了 fieldterminator '\t',但结果相同
  • 好的,award_players.csv 和你我的说法一致。可以分享一下master.csv文件吗?
猜你喜欢
  • 2015-06-30
  • 2012-10-24
  • 2022-01-21
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
相关资源
最近更新 更多