我对如何导入数据感到困惑
我有一个来自DHCP的csv,包含_time,hostname,IP_addr
我想添加任何已更改的IP作为新关系,但保持旧的ip关系状态属性不活动,也认为我想要限制到最后10个。
我不确定在cypher中执行此操作的最简单方法,或者我是否应该使用python来实现此复杂性
可能总是添加(删除重复项)/ csv import
和第二个查询来停用任何旧的ips(如果我有时间作为关系的属性,我如何查询非当前)
和第三个查询,用于删除多达10个以前的ips挂起的关系。
任何帮助或想法将不胜感激
答案 0 :(得分:0)
听起来很有趣。不确定每个host-ip组合是否只在csv中出现一次,或者在以后的某个时间出现,例如"仍然在这里"更新
LOAD CSV FROM "url" AS row
MERGE (h:Host {name:row.hostname})
MERGE (ip:IP {name:row.IP_addr})
MERGE (h)-[:IP]->(ip) ON CREATE SET rel.created = row._time, rel.status = 1
// optional for pre-existing/previous rels
ON MATCH SET rel.status = 0
SET rel.updated = row._time;
MATCH (h:Host) WHERE size( (h)-[:IP]->() ) > 1
MATCH (h)-[rel:IP]->(:IP)
WITH h,rel ORDER BY rel.updated DESC
WITH h, collect(rel) as rels
// not necessary when the status is set above
FOREACH (r in rels[1..9] | SET r.status=0)
FOREACH (r IN rels[10..-1] | DELETE r)
MATCH (h:Host)-[rel:IP {status:0}]->(:IP)
WITH h,rel ORDER BY rel.updated DESC
WITH h, collect(rel) as rels
FOREACH (r IN rels[9..-1] | DELETE r)