如何在Neo4j中有效地摄取数据?

问题描述 投票:0回答:2

我正在寻求关于处理进入Neo4j的数据的最佳方式的建议。

我有一组结构化的数据,CSV格式,与旅程有关。这些数据是

"旅程ID" - 独有的参考文献# 主密钥,例如:1234。

"StartID" - ref# ,这是一个站点,例如:Station1。

"EndIID" - ref# 这是一个站点,例如Station1(起点和终点可以相同)。

"时间" - 整数

假设我有100个行程数据,显示10个不同车站之间的行程。

我可以在SQL或Excel中查看和处理这些数据。我想在Neo4j中处理这些数据。

这是我目前所拥有的。

StartID与JourneyID作为标签EndID与JourneyID作为标签。

这意味着从CSV中的每一行对于一个站点来说都是自己的节点。然后我用JourneyID(主键)创建了一个Start和End之间的关系,效果就是100个节点连接到100个节点。如:站1和站2的连接,站1和站3的连接,站1和站4的连接。它没有显示起点站1和终点站1、2、3之间的关系--这正是我想显示的。

我怎样才能最好地对这些数据进行建模,使图形看到10个唯一的StartID,连接到不同的EndIDs - 显示它们之间的关系?

先谢谢你

(新来的Graphs!)

graph neo4j data-modeling
2个回答
0
投票

我认为你不希望旅程是一个节点,你希望旅程ID是边缘的一个属性。

LOAD CSV WITH HEADERS FROM 'file://input.csv' AS row
MERGE (start:Station {id: row.StartID})
MERGE (end:Station {id: row.EndID})
MERGE (start)-[:JOURNEY {id:row.JourneyID}]->(end)

这样可以更直观地描述数据 如果你能更详细地描述Journey,你甚至可以把它扩展到不同的关系类型中去

编辑。

这是为了回答你的问题,但我不能说这是如何扩展的。我认为这取决于你计划进行的查询类型。


1
投票

这个示例查询,它使用了 MERGE 以避免创建重复的节点和关系,应该可以帮助你入门。

LOAD CSV WITH HEADERS FROM 'file://input.csv' AS row
MERGE (start:Station {id: row.StartID})
MERGE (end:Station {id: row.EndID})
MERGE (j:Journey {id: row.JourneyID})
ON CREATE SET j.time = row.Time
MERGE (j)-[:FROM]->(start)
MERGE (j)-[:TO]->(end)
© www.soinside.com 2019 - 2024. All rights reserved.