【问题标题】:Complex node creation using Neo4j使用 Neo4j 创建复杂节点
【发布时间】:2016-06-21 21:20:45
【问题描述】:

我正在处理来自 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。

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

【问题讨论】:

标签: neo4j cypher


【解决方案1】:

根据您指定的数据模型和示例数据,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 节点,将其连接到具有 ORIGIN 关系的原始 Airport 节点,并在该关系上设置延迟属性:

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);

【讨论】:

  • 谢谢。会尝试这种方式。
猜你喜欢
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多