我有一个表 - 实体(Entities.txt),我已经使用“LOAD CSV”命令加载到Neo4j中。 实体表的结构如下:
**Entity Table**
ENT_ID Name PARENTID
1 ABC 0
2 DEF 1
3 GHI 0
4 JKG 3
我有另一张表格,格式如下:
**Relationship Table**
RelationID ENT_IDPARENT ENT_IDCHILD
1 1 2
2 3 5
3 4 6
我需要的是在现有节点上创建关系。每个RelationID代表特定类型的关系。例如:RelationID = 1表示ENT_IDPARENT = 1是FATHER_OF ENT_IDCHILD = 2.类似地,每个其他RID代表一些其他关系。该表有40个RID。
基于链接: How to create unique nodes and relationships by csv file imported in neo4j?
我尝试编写下面的语法来创建关系。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///C:/Users/ssubramana001/Desktop/EntitiesRelationships_Updated.txt" AS Entity FIELDTERMINATOR '|'
MATCH (n:Entity {ENT_ID: Entity.ENT_IDPARENT})
WITH Entity, n
MATCH (m:Entity {ENT_ID: Entity.ENT_IDCHILD})
WITH m,n
MERGE (n)-[r:SON_OF]->(m)
此查询不起作用。
答案 0 :(得分:0)
显然,我没有拥有数百万行的实际文件,但这肯定适用于您的示例:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///relationships.csv" AS line
WITH toInt(line.ENT_IDPARENT) AS parentId, toInt(line.ENT_IDCHILD) AS childId
WHERE line.RelationID = '1'
MATCH (p:Entity {ENT_ID: parentId}), (c:Entity {ENT_ID: childId})
MERGE (p)-[:FATHER_OF]->(c);
请注意,它会像创建节点in your previous question一样转换数值。
您在使用USING PERIODIC COMMIT
时出现OutOfMemory错误确实很奇怪,但您可以尝试将CSV文件拆分为较小的文件,以确定在导入所有文件后是否也会发生这种情况。也许你的Neo4j实例没有足够的内存来管理所有这些节点(我想它必须非常有限)?您是否可以使用确切的OutOfMemory错误更新问题,包括消息?你可能已经用完了PermGen或MetaSpace(取决于你的Java版本),或者因为这个而点击交换并让GC花费太多时间。