当前位置: 首页 > article >正文

Nebula NGQL语言的使用 一

前言:可借鉴资料

文档:https://docs.nebula-graph.com.cn
Nebula Graph架构,实践等文章:https://nebula-graph.com.cn/posts
视频分享和教程:https://space.bilibili.com/472621355
入门文章索引:https://zhuanlan.zhihu.com/p/368781105
用户问答论坛:https://discuss.nebula-graph.com.cn
GitHub:https://github.com/vesoft-inc/nebula-graph
Nebula 布道者博客:https://siwei.io/posts/

Nebula 图数据库的逻辑组成:
图空间(Space) 由 点(Vertex),标签(Tag),边(Edge),边类型(Edge type)

图空间(Space) 在NGQL中 有TAG 与 EDGE两个存储概念。
TAG:记录实体信息,每个实体中都有一个VID 在一个图空间中,VID的值是唯一的 但是VID 在insert时,并不限制VID重复,但是在delete时,会导致所有相同的VID 被删除。
EDGE:记录关系信息,每个关系信息中都有一个RANK 在一个关系中用于组成组合唯一值。它也可以为点增加属性,比如 100->100:(money=一个小目标)。

一、图空间的创建
涉及两个参数:partition_num和replica_factor
partition_num 默认值是100,replica_factor 的参数值是1
第一种创建图空间方式,默认值创建
#默认值创建表空间

create space default_value;

#查看表空间的属性

describe space default_value;

第二种创建图空间的方式,是通过指定partition_num值

create space specify_partition(partition_num=10)

查看图空间属性

describe space specify_partition;

第三种创建图空间的方式,是通过指定replica_factor值

create space specify_replica(replica_factor=3);
describe space specify_replica;

第四种创建图空间的方式,是通过指定partition_num与replica_factor值的方式

create space nba(partition_num=10,replica_factor=3);
describe space nba;

#使用如下命令查看已存在的图空间

show spaces;
#使用如下命令删除图空间
drop space default_value;
#使用如下命令切换到图空间中
use nba;

二、在Nebula Graph 中创建标签
#创建与查看

create tag player(name string,age int);
show tags;
create tag team(name string);
show team;

#查看tag详情

describe tag player;
describe tag team;

#创建于删除

create tag property_free();
drop tag property_free;

三、在Nebula Graph 中创建边类型
#创建与查看

create edge follow(degree int);
show edges;
create edge serve(start_year int,end_year int);
show edges;

#查看edge详情

describe edge follow;
describe edge serve;

#创建与删除

create edge no_property();
drop edge no_property;

四、在Nebula Graph 中插入点(VID 必须要引号引起来,否则报错)

insert vertex player(name,age) values "100":("Tim Duncan",42);
insert vertex player(name,age) values "101":("Tony Parker",36),"102":("LaMarcus Aldridge",33),"103":("Rudy Gay",32),"99":("Useless",0);
insert vertex team(name) values "200":("Warriors"),"201":("Nuggets");

#查看(使用FETCH 查询点的属性值)(VID 必须要引号引起来,否则报错)

FETCH PROP ON player "100","101","102","103" YIELD properties(vertex);
FETCH PROP ON team "200","201" YIELD properties(vertex);

#删除点语句

delete vertex "101";
fetch prop on player;
Wrong vertex id type;

五、在Nebula Graph 中插入边
#释义 100是点的起始位置,指向-> 101点的最终位置:(值)
#插入边数据

insert edge follow(degree) values "100" -> "101":(95);
insert edge serve(start_year,end_year) values "100" -> "101":(1997,2016),"101" -> "201":(1999,2018);

#查询点与点之间边的信息(关联关系)

fetch prop on follow "100" -> "101" YIELD properties(edge);
fetch prop on serve "100" -> "200","101" -> "201" YIELD properties(edge);

#在两个点之间插入多条同类型的边,可以使用ranking参数"101"@1 其中1 表示ranking的值

insert edge follow(degree) values "100" -> "101"@1:(80);
fetch prop on follow "100" -> "101"@1 YIELD properties(edge);

#删除边,删除带有ranking值的边

delete edge follow "100" -> "101";
delete edge follow "100" -> "101"@1;

六、在Nebula Graph 中查询数据
使用go语句查询
#指定起始位置遍历所有位置(起点VID 100开始查询,遍历所有被VID 100关注的点)

GO FROM 100 OVER follow;

#找到年龄大于35的球员且该球员被VID为100的球员关注(WHERE语句限定年龄,$$符号表示目标点,YIELD语句指定返回的结果并别名展示)

GO FROM 100 OVER follow WHERE $$.player.age > 35 YIELD $$.player.name AS Teammate,$$.player.age AS Age;

#找到VID 100 关注的球员所效力的球队(两种方式:第一种方式中使用管道(pipe),第二种方式中使用临时变量)

GO FROM 100 OVER follow YIELD follow._dst AS id | \
GO FROM $-.id OVER serve YIELD $$.team.name \
AS Team,$^.player.name AS Player;

解释:|竖线 表示管道,\斜线表换行符。意思是将第一个GO语句得到的值作为第二条GO语句的输入值。

$var=GO FROM 100 OVER follow YIELD follow.dst AS id; \
GO FROM $var.id OVER serve YIELD $$.team.name \
AS Team,$^.player.name AS Player;

解释:将第一个GO语句定义为一个变量,在第二个GO语句中引入该变量

图语义的Query 可以更快的进行操作,书写的SQL 复杂的度较小于关系型SQL。


http://www.kler.cn/a/391301.html

相关文章:

  • 鸿蒙自定义UI组件导出使用
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • 机器学习——损失函数、代价函数、KL散度
  • javascript 函数【知识点整理】
  • 【机器学习】平均绝对误差(MAE:Mean Absolute Error)
  • C指针创建三维数组
  • LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)
  • vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框
  • 智能科技赋能金融决策:中阳科技的数据分析解决方案
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • vue3 富文本组件(MDEditor)在拖拽组件(vuedraggable)点击功能失效问题
  • Python 操作 Neo4J,Python 库 Py2Neo
  • (三)【 Python最牛 -Basemap】使用Basemap进行地图可视化
  • 项目管理人员的自我评估与职业目标设定
  • Knife4j调试全局对象参数自动化
  • A算法详解(go实现)
  • 【服务器】本地安装X11 服务器-Windows
  • 【学习】【HTML】HTML、XML、XHTML
  • Spring Boot编程训练系统:核心特性与实现策略
  • 《JVM第10课》内存溢出(OOM)排查过程
  • Rust 生态系统的未来与学习方向
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局
  • 鸿蒙进阶-属性动画
  • 移远通信亮相骁龙AI PC生态科技日,以领先的5G及Wi-Fi产品革新PC用户体验
  • 【缓存策略】你知道 Cache Aside(缓存旁路)这个缓存策略吗
  • 在JPA和EJB中用乐观锁解决并发问题