我正在处理来自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。
如果我们需要手动创建所有这些节点,我们可以实现它们,但我不确定如何从输入数据集创建这些节点。有人可以帮助我实现这种节点和关系吗?
答案 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);