NebulaGraph 知识图谱数据库使用:nebula数据库连接使用

打印 上一主题 下一主题

主题 935|帖子 935|积分 2805

参考:https://github.com/vesoft-inc/nebula-python/blob/master/example/GraphClientSimpleExample.py
文档:https://docs.nebula-graph.com.cn/3.4.1/3.ngql-guide/7.general-query-statements/2.match/#_4
  1. pip install nebula3-python
复制代码

1)查询的节点,再把这头节点再查一度范围的节点
  1. MATCH p=(n)-[*3]->(m) WHERE id(m) == '39f1e6f***d2c4b06e2' WITH DISTINCT id(n) AS startNodeId, p MATCH (n)-[r]->(o) WHERE id(n) == startNodeId RETURN id(n), p, r, o LIMIT 600;
复制代码

2)通过属性(时间、ip等)查询节点信息;
  1. MATCH (rt:ResourceTopology {ip:"75.234.9.39"}) RETURN  rt;
  2. MATCH (rt:ResourceTopology ) WHERE rt.ResourceTopology.ip == "75.234.9.39" RETURN rt;
复制代码


  1. LOOKUP ON ResourceTopology WHERE ResourceTopology.ip =="75.234.9.39" YIELD id(vertex) as vid,ResourceTopology.ip,ResourceTopology.app_id,ResourceTopology.creation_time;
复制代码

属性指定范围内查询:
时间范围(参考:https://docs.nebula-graph.com.cn/3.4.1/3.ngql-guide/3.data-types/4.date-and-time/#datetime)
  1. MATCH (rt:ResourceTopology) WHERE rt.ResourceTopology.creation_time >= datetime("2023-08-21T16:51:39.000000") AND rt.ResourceTopology.creation_time <= datetime("2023-10-21T17:21:39.000000") RETURN rt;
复制代码


3)查询节点间最短路径
https://docs.nebula-graph.com.cn/3.4.1/3.ngql-guide/7.general-query-statements/2.match/#_4

e*…5 表示路径中边的数目最多为 5
  1. MATCH p = shortestPath((a:AlarmTag{ip:"75.234.23.167"})-[e*..5]-(b:ResourceTopology))  WHERE id(b) == "1a5a0a0b74416***53ca07a35" RETURN p;
  2. MATCH p = shortestPath((a)-[e*..5]-(b:ResourceTopology))  WHERE id(a) == "39f1e6f80f75bd1fc48e928d2c4b06e3" AND id(b) == "1a5a0a0b74416a3b624500853ca07a35"RETURN p;
复制代码


4)搜刮一个节点范例关联的其他范例的节点查询
  1. MATCH p = (startNode:ResourceTopology)-[*1..10]->(endNode:AlarmTag)  WHERE id(startNode) == '00024bd***4f2058'
  2. RETURN p;
复制代码
  报错:Error found in optimization stage: IndexNotFound: No valid index found
nebula查询具体属性的话需要先对该属性建立索引,
1)给AlarmTag范例节点的ip创建索引 CREATE TAG INDEX IF NOT EXISTS ip_index_1 ON AlarmTag(ip(20));
2)加载生效 REBUILD TAG INDEX ip_index_1;
3)SHOW JOB 8;查看结果

构建的索引可以在页面schema里查看:

   

大概creation_time不带括号,数字一样平常不需要括号,字符串需要:
  1. CREATE TAG INDEX IF NOT EXISTS creation_index_1 ON ResourceTopology(creation_time);
  2. REBUILD TAG INDEX creation_index_1;
  3. MATCH (rt:ResourceTopology) WHERE rt.ResourceTopology.creation_time >= datetime("2023-10-16T14:51:39.000000") AND rt.ResourceTopology.creation_time <= datetime("2023-10-16T17:21:39.000000") RETURN rt;
复制代码

这里timestamp NebulaGraph只有10位,生存表里不止10位这里*1000
  1. MATCH (rt:AlarmTag ) WHERE rt.AlarmTag.alarm_time <= timestamp("2024-06-15T06:18:43")*1000 RETURN rt;
复制代码


代码:
  1. from nebula3.gclient.net import ConnectionPool
  2. from nebula3.Config import Config
  3. config = Config() # 定义一个配置
  4. config.max_connection_pool_size = 10 # 设置最大连接数
  5. connection_pool = ConnectionPool() # 初始化连接池
  6. # 如果给定的服务器是ok的,返回true,否则返回false
  7. ok = connection_pool.init([('192.1**', 9669)], config)
  8. # 方式1:connection pool自己控制连接释放
  9. # 从连接池中获取一个session
  10. session = connection_pool.get_session('root', 'n')
  11. session.execute('USE topology_space') # 选择space
  12. # results  = session.execute(
  13. #             "MATCH p=(a)-[*3]->(b) where id(a) == '04d690ad942998ea7ed2b74decd7fe9c'  RETURN p limit 105;"
  14. #         )
  15. results  = session.execute("MATCH p=(n)-[*3]->(m) WHERE id(n) == '693a18da69f5d3d4e3caa4cf09610d29'  RETURN p LIMIT 600;")
复制代码
results.column_values(“p”)

results.row_values(14)[0]
results.as_data_frame()

查询结果为json:
  1. results1 = session.execute_json("MATCH p=(n)-[*3]->(m) WHERE id(n) == '693a18da69f5d3d4e3caa4cf09610d29'  RETURN p LIMIT 600;")
  2. import json
  3. print(len(json.loads(results1)["results"][0]["data"]))
  4. json.loads(results1)["results"][0]["data"][0]
  5. json.loads(results1)["results"][0]["data"][14]
复制代码

这个查询结果来自一个图数据库,表示了一个包罗极点和边的图形结构。在这个结果中,meta 和 row 是两个重要的部分。

  • meta 部分:它描述了图形中的极点和边的信息。每个元素(极点或边)都有一个 type 属性来表示它是极点还是边,以及一个 id 属性来唯一标识它。对于边,还有额外的属性,如 ranking、name、type、dst(目的极点ID)和 src(源极点ID)。
在这个例子中,meta 包罗了以下极点和边:


  • 极点1(ID:693a18da69f5d3d4e3caa4cf09610d29)
  • 边1(ID:由排名、名称、范例、目的极点和源极点构成)
  • 极点2(ID:4f6d483d823c74e1838cc5c0d02152f9)
  • 边2(ID:由排名、名称、范例、目的极点和源极点构成)
  • 极点3(ID:46a51ed199f4d362d442e5a56d79fbe3)
  • 边3(ID:由排名、名称、范例、目的极点和源极点构成)
  • 极点4(ID:19@159_183_110_127)

  • row 部分:它包罗了与 meta 中描述的极点和边相关联的数据属性。这些属性以字典的形式存储,其中键是属性名,值是属性值。
在这个例子中,row 包罗了以下数据:


  • 与极点1相关的属性(如 ResourceTopology.name、ResourceTopology.status 等)
  • 与边1相关的属性(如 relationship_type、app_id 等)
  • 与极点2相关的属性(如 ResourceTopology.hostname、ResourceTopology.ip 等)
  • 与边2相关的属性(如 line_type、source_port 等)
  • 与极点3相关的属性(如 ResourceTopology.hostname、ResourceTopology.ip 等)
  • 与边3相关的属性(为空)
  • 与极点4相关的属性(如 Ip.app_id、Ip.ip 等)
总之,这个查询结果展示了一个包罗多个极点和边的图形结构,以及这些极点和边所关联的数据属性。这种结构可以用于表示复杂的网络关系、资源拓扑等场景。
  1. json.loads(results1)["results"][0]["data"][14]["meta"]
  2. json.loads(results1)["results"][0]["data"][14]["row"]
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表