【问题标题】:Neo4j import csv / DHCP data controlling duplicationNeo4j 导入 csv / DHCP 数据控制复制
【发布时间】:2017-03-11 12:10:17
【问题描述】:

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

我有一个来自 DHCP 的 csv,带有 _time、主机名、IP_addr

我想将任何更改的 IP 添加为新关系,但保持旧 ip 关系的状态属性为非活动状态,还想我想限制到最后 10 个。

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

也许总是添加(删除重复)/csv 导入

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

还有第三个查询,如果超过 10 个之前的 ips 挂在它上面,则删除关系。

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

【问题讨论】:

    标签: python csv neo4j


    【解决方案1】:

    听起来很有趣。不确定每个主机-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)
    

    在load语句中正确设置状态时

    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)
    

    【讨论】:

    • 谢谢迈克尔!很酷。 Cypher 有很多我没见过的功能。这是一种很酷的语言。再次感谢您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多