如何在 Neo4j 中有效地摄取数据
How to ingest data effectively in Neo4j
我正在寻找有关处理进入 Neo4j 的数据的最佳方法的建议。
我有一组与旅程相关的结构化数据,CSV 格式。数据为:
"JourneyID" - 唯一的 ref#/ 主键例如 1234
"StartID" - ref#,这是一个站,例如 Station1
"EndIID" - ref# 这是一个站,例如 Station1(开始和结束可以相同)
"Time" – 整数,例如24
假设我有 100 journeys/rows 个数据,显示 10 个不同站点之间的旅程。
我可以在 SQL 或 Excel 中查看和使用这些数据。我想在 Neo4j 中使用它。
这是我目前拥有的:
以 JourneyID 作为标签的 StartID
EndID with Journey ID 作为标签
这意味着一个站的 CSV 中的每一行都是它自己的节点。然后我使用 JourneyID(主键)在 Start 和 End 之间创建了一个关系
结果只是 100 个节点连接到 100 个节点。例如从 Station1 和 Station 2,Station 1 和 Station 3,以及 Station 1 和 Station 4 的连接。它没有显示起始 Station1 和结束 Station1、2 和 3 之间的关系 - 这是我想要显示的。
如何最好地对此数据建模,以便图形看到 10 个唯一的 StartID,连接到不同的 EndID——显示它们之间的关系?
提前致谢
(图形新手!)
此示例查询使用 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)
我认为您不希望 Journey 成为节点,而是希望 Journey 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)
这更直观地描述了数据,如果您能更详细地描述旅程,您甚至可以将其扩展到不同的关系类型。
编辑:
这是为了回答你的问题,但我不能说这是如何扩大规模的。我认为这取决于您计划进行的查询类型。
我正在寻找有关处理进入 Neo4j 的数据的最佳方法的建议。
我有一组与旅程相关的结构化数据,CSV 格式。数据为:
"JourneyID" - 唯一的 ref#/ 主键例如 1234
"StartID" - ref#,这是一个站,例如 Station1
"EndIID" - ref# 这是一个站,例如 Station1(开始和结束可以相同)
"Time" – 整数,例如24
假设我有 100 journeys/rows 个数据,显示 10 个不同站点之间的旅程。
我可以在 SQL 或 Excel 中查看和使用这些数据。我想在 Neo4j 中使用它。
这是我目前拥有的:
以 JourneyID 作为标签的 StartID EndID with Journey ID 作为标签
这意味着一个站的 CSV 中的每一行都是它自己的节点。然后我使用 JourneyID(主键)在 Start 和 End 之间创建了一个关系 结果只是 100 个节点连接到 100 个节点。例如从 Station1 和 Station 2,Station 1 和 Station 3,以及 Station 1 和 Station 4 的连接。它没有显示起始 Station1 和结束 Station1、2 和 3 之间的关系 - 这是我想要显示的。
如何最好地对此数据建模,以便图形看到 10 个唯一的 StartID,连接到不同的 EndID——显示它们之间的关系?
提前致谢
(图形新手!)
此示例查询使用 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)
我认为您不希望 Journey 成为节点,而是希望 Journey 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)
这更直观地描述了数据,如果您能更详细地描述旅程,您甚至可以将其扩展到不同的关系类型。
编辑:
这是为了回答你的问题,但我不能说这是如何扩大规模的。我认为这取决于您计划进行的查询类型。