使用Neo4j创建复杂节点

时间:2016-06-21 21:20:45

标签: neo4j cypher

我正在处理来自BTS的航班数据集,并以下面的格式输入我的输入文件(提供一些示例数据):

FL_NO   ORIGIN  CITY    DEP_DELAY   carr_delay  weather_delay   nas_delay   

4        DFW    Dallas    10            0           12             15
5        ATL    Georgia   0            50            0             5
6        LOG    Boston    20           35           10             50

在这里,我需要使用Neo4j中的密码查询来创建节点和关系。从这个输入数据集,我需要形成不同的节点集。

我需要为原始机场设置三个不同的节点。我需要分析这些机场之间为特定航班延误的情况。

    CREATE (DFW:Airport {city:'Dallas'}), (ATL:Airport {city:'Atlanta'}),
    (LOG:Airport {city:'Boston'})

航班节点,

CREATE (flight1:Flight {flight_number:4),
(flight2:Flight {flight_number:5),
(flight3:Flight {flight_number:6)

然后需要将航班链接到相应的来源并延迟。

(flight4)-[:ORIGIN {dep_delay:10}]->(DFW)

同样,我需要链接carr_delay,weather_delay和nas_delay。

如果我们需要手动创建所有这些节点,我们可以实现它们,但我不确定如何从输入数据集创建这些节点。有人可以帮助我实现这种节点和关系吗?

1 个答案:

答案 0 :(得分:2)

根据您指明的数据模型和示例数据,LOAD CSV Cypher语句将如下所示:

首先在Airport.code上创建一个唯一性约束:

CREATE CONSTRAINT ON (a:Airport) ASSERT a.code IS UNIQUE;

现在遍历CSV文件,为每个机场创建Airport个节点:

LOAD CSV WITH HEADERS FROM "file:///flights.csv" AS row
MERGE (a:Airport {code: row.ORIGIN})
ON CREATE SET a.city = row.CITY;

然后再次遍历CSV文件,为每个航班创建一个Flight节点,将其连接到具有Airport关系的原始ORIGIN节点,并设置关系的延迟属性:

LOAD CSV WITH HEADERS FROM "file:///flights.csv" AS row
CREATE (f:Flight {flight_number: row.FL_NO})
MATCH (a:Airport) WHERE a.code = row.ORIGIN
MERGE (a)<-[r:ORIGIN]-(f)
SET r.dep_delay = toInt(row.DEP_DELAY),
    r.carr_delay = toInt(row.carr_delay),
    r.weather_delay = toInt(row.weather_delay),
    r.nas_delay = toInt(row.nas_delay);