neo4j - 将 tsv 文件中的选定行导入 neo4j
问题描述
我有一个具有这种格式关系的文件:
!comment
!comment
nodeID nodeName edgeType nodeID
nodeID nodeName edgeType nodeID
nodeID nodeName edgeType nodeID
我想将该文件的节点和边缘导入到我的 neo4j 数据库中。
我尝试了以下步骤:
- 在节点 ID 上创建唯一约束
- 读取文件,跳过注释行,从每一行创建唯一节点(如果节点已经存在,则跳过行)
- 读取文件,跳过注释行,从每一行创建边缘
// Each node id is unique
CREATE CONSTRAINT ON (n:Node) ASSERT n.id IS UNIQUE
// For each row not starting by "!", create node if it doesn't exist
LOAD CSV FROM "file:///relationships.tsv" AS row
FIELDTERMINATOR '\t'
WITH row
WHERE NOT row =~ '^!.*'
CREATE (:Node {id: row[0], name: row[1]})
// For each row not starting by "!", create edge
LOAD CSV FROM "file:///relationships.tsv" AS row
FIELDTERMINATOR '\t'
WITH row
WHERE NOT row =~ '^!.*'
MATCH (n:Node), (m:Node)
WHERE n.id = row[0] AND m.id = row[3]
WITH n, m, row
CASE row[2]
WHEN 'F' THEN
CREATE UNIQUE (m)-[:Edge {type: 'friend'}]->(n)
WHEN 'P' THEN
CREATE UNIQUE (m)-[:Edge {type: 'partner'}]->(n)
END
上面的代码不起作用。作为密码新手,我不确定自己做错了什么。我希望最终合并步骤 2 和 3 以读取文件一次并完成它。如何有效地导入这些数据?
解决方案
[更新两次]
此版本的第三个查询应该可以工作:
LOAD CSV FROM "file:///relationships.tsv" AS row
FIELDTERMINATOR '\t'
WITH row
WHERE NOT row[0] STARTS WITH '!'
MATCH (m:Node)
WHERE m.id = row[3]
MERGE (n:Node {id: row[0]})
SET n.name = row[1]
FOREACH (domain IN
CASE
WHEN row[2] = 'F' THEN ['friend']
WHEN row[2] = 'P' THEN ['partner']
ELSE []
END |
MERGE (t)-[:Edge {type: domain}]->(p)
);
它正确地测试了行中的第一项(不是整个行列表——它不是字符串)的起始“!”。它还使用一个FOREACH
子句来执行条件更新(CypherCASE
子句本身不支持)。此查询还使用MERGE
不推荐使用的CREATE UNIQUE
. 它还使用MERGE
而不是CREATE
创建n
节点,以确保您不会产生重复项(例如,如果您重新运行相同的查询)。
推荐阅读
- oracle - 使用 FormsGraph.jar 在 Oracle Forms 10g 中创建饼图的问题
- c# - openssl_decrypt() 用于加密 c#
- android - ViewPager2 中未显示图像(片段重新打开时)
- android - 如何在有根的 android 设备上捕获和注入陀螺仪事件
- python - Pymoo Python:TypeError:_evaluate() 得到了一个意外的关键字参数“算法”
- php - Models does not appear
- c# - Is there a way to iterate through entites of the same type in a context in ASP.NET?
- grafana - 在 Grafana (InfluxDB) 中自动选择新行
- c# - Decrypt AES-256-CBC with PBKDF2 from OpenSSL in C#
- stripe-payments - Stripe - This customer has no attached payment source or default payment method