Neo4j导入控制重复的csv / DHCP数据

时间:2017-03-11 12:10:17

标签: python csv neo4j

我对如何导入数据感到困惑

我有一个来自DHCP的csv,包含_time,hostname,IP_addr

我想添加任何已更改的IP作为新关系,但保持旧的ip关系状态属性不活动,也认为我想要限制到最后10个。

我不确定在cypher中执行此操作的最简单方法,或者我是否应该使用python来实现此复杂性

可能总是添加(删除重复项)/ csv import

和第二个查询来停用任何旧的ips(如果我有时间作为关系的属性,我如何查询非当前)

和第三个查询,用于删除多达10个以前的ips挂起的关系。

任何帮助或想法将不胜感激

1 个答案:

答案 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)