跳到主要内容
版本:3.10.0

悦数图数据库 查询语句概述

本文介绍 悦数图数据库 的通用的查询语句分类及各类语句的使用场景。

背景信息

悦数图数据库 的数据以点和边的形式存储。每个点可以有 0 或多个标签(Tag);每条边有且仅有一个边类型(Edge Type)。标签定义点的类型以及描述点的属性;边类型定义边的类型以及描述边的属性。在查询时,可以通过指定点的标签或边的类型来限定查询的范围。更多信息,请参见数据模型

查询语句分类

悦数图数据库 的核心查询语句可分为:

FETCH PROP ONLOOKUP ON更多用于基础的数据查询;GOMATCH用于更复杂的查询和图数据遍历;FIND PATHGET SUBGRAPH用于图数据的路径查询和子图查询;SHOW用于获取数据库的元数据信息。

用法及使用场景

FETCH PROP ON

用法:用于获取指定点或边的属性。

场景:已知具体的点 ID 或边 ID,并想获取其属性。

说明

  • 必需指定点或边的 ID。
  • 必需指定点或边所属的标签或边类型。
  • 使用YIELD子句指定返回的属性。

示例

FETCH PROP ON player "player100" YIELD properties(vertex);
--+--- ----+----- -------+----------
| | |
| | |
| | +--------- 返回点的 player TAG 下所有属性
| |
| +----------------- 从 "player100" 这个点获取
|
+--------------------------- 获取 player 这个 TAG 下的属性

更多信息,请参见 FETCH PROP ON

LOOKUP ON

用法:用于基于索引查询点或边 ID。

场景:根据属性值查找点或边的 ID。

说明

  • 必需预先定义索引
  • 必需指定点或边所属的标签或边类型。
  • 使用YIELD子句指定返回的 ID。

示例

LOOKUP ON player WHERE player.name == "Tony Parker" YIELD id(vertex);
--+--- ------------------+--------------- ---+------
| | |
| | |
| | +---- 返回查到点的 VID
| |
| +------------ 过滤条件是属性 name 的值
|
+----------------------------------- 根据点的 TAG player 查询

更多信息,请参见 LOOKUP ON

GO

用法:用于基于给定的点进行图遍历,按需返回起始点、边或目标点的信息。可以指定遍历的深度、边的类型、方向等。

场景:复杂的图遍历,比如找到某个点的朋友、朋友的朋友等。

说明

  • 结合属性引用符($^$$)来返回起始点或目标点的属性,例如YIELD $^.player.name
  • 结合函数properties($^)properties($$)来返回起始点或目标点的所有属性;或者在函数中指定属性名,来返回指定的属性,例如YIELD properties($^).name
  • 结合函数src(edge)dst(edge)来返回边的起始点或目标点 ID,例如YIELD src(edge)

示例

GO 3 STEPS FROM "player102" OVER follow YIELD dst(edge);
-----+--- --+------- -+---- ---+-----
| | | |
| | | |
| | | +--------- 返回最后一跳边的终点
| | |
| | +------ 从 follow 这个边的出方向探索
| |
| +--------------------- 起点是 "player102"
|
+---------------------------------- 探索 3 步

更多信息,请参见 GO

MATCH

用法:用于执行复杂的图模式匹配查询。

场景:复杂的图模式匹配时使用,比如寻找满足特定模式的点和边的组合。

说明

MATCH 语句兼容 OpenCypher 的语法,但是有一些差异:

  • 使用==表达相等判断而不是=,例如WHERE player.name == "Tony Parker"

  • 引用点的属性时,需要指定点的标签,例如YIELD player.name

  • 新增WHERE id(v) == "player100"语法。

  • 必须使用RETURN子句指定返回的信息。

示例

MATCH (v:player{name:"Tim Duncan"})--(v2:player) \
RETURN v2.player.name AS Name;

更多信息,请参见 MATCH

FIND PATH

用法:用于查询给定的起始点和目标点之间的所有路径;或者查询路径中的点和边的属性时使用。

场景:查询两个点之间的所有路径。

说明:必须使用YIELD子句指定返回信息。

示例

FIND SHORTEST PATH FROM "player102" TO "team204" OVER * YIELD path AS p;
-------+----- -------+---------------- ---+-- ----+----
| | | |
| | | |
| | | +---------- 返回路径为 p 列
| | |
| | +----------- 经由所有类型的边的出方向探索
| |
| |
| +------------------ 从给定的起点、终点 VID
|
+--------------------------- 查找最短路径

更多信息,请参见 FIND PATH

GET SUBGRAPH

用法:提取满足特定条件的图的一部分;查询子图中的点和边的属性。

场景:分析图的局部结构或特定区域时非常有用,比如提取某个人的社交网络子图,或者提取某个区域的交通网络。

说明:必须使用YIELD子句指定返回信息。

示例

GET SUBGRAPH 5 STEPS FROM "player101" YIELD VERTICES AS nodes, EDGES AS relationships;
-----+- -----+-------- ------------------------+----------------
| | |
| | |
| +------- 从 "player101" 开始出发 +------------ 返回所有的点、边
|
+----------------- 获取 5 步的探索

更多信息,请参见 GET SUBGRAPH

SHOW

SHOW 语句主要用于获取数据库的元数据信息,而不是用于获取存储在数据库中的实际数据内容。这类语句通常用于查询数据库的结构和配置,如查看现有的图空间、标签、边类型、索引等。

语句语法示例说明
SHOW CHARSETSHOW CHARSETSHOW CHARSET显示当前的字符集。
SHOW COLLATIONSHOW COLLATIONSHOW COLLATION显示当前的排序规则。
SHOW CREATE SPACESHOW CREATE SPACE <space_name>SHOW CREATE SPACE basketballplayer显示指定图空间的创建语句。
SHOW CREATE TAG/EDGESHOW CREATE {TAG <tag_name> | EDGE <edge_name>}SHOW CREATE TAG player显示指定 Tag/Edge type 的基本信息。
SHOW HOSTS`SHOW HOSTS [GRAPHSTORAGEMETA]`
SHOW INDEX STATUSSHOW {TAG | EDGE} INDEX STATUSSHOW TAG INDEX STATUS重建原生索引的作业状态,以便确定重建索引是否成功。
SHOW INDEXESSHOW {TAG | EDGE} INDEXESSHOW TAG INDEXES列出当前图空间内的所有 Tag 和 Edge type(包括属性)的索引。
SHOW PARTSSHOW PARTS [<part_id>]SHOW PARTS显示图空间中指定分片或所有分片的信息。
SHOW ROLESSHOW ROLES IN <space_name>SHOW ROLES in basketballplayer显示分配给用户的角色信息。
SHOW SNAPSHOTSSHOW SNAPSHOTSSHOW SNAPSHOTS显示所有快照信息。
SHOW SPACESSHOW SPACESSHOW SPACES显示现存的图空间。
SHOW STATSSHOW STATSSHOW STATS显示最近STATS作业收集的图空间统计信息。
SHOW TAGS/EDGES`SHOW TAGSEDGES`SHOW TAGSSHOW EDGES
SHOW USERSSHOW USERSSHOW USERS显示用户信息。
SHOW SESSIONSSHOW SESSIONS SHOW SESSIONS显示所有会话信息。
SHOW SESSIONSSHOW SESSION <Session_Id>SHOW SESSION 1623304491050858指定会话 ID 进行查看。
SHOW QUERIESSHOW [ALL] QUERIESSHOW QUERIES查看当前 Session 中正在执行的查询请求信息。
SHOW META LEADERSHOW META LEADERSHOW META LEADER显示当前 Meta 集群的 leader 信息。

复合查询

悦数图数据库 的查询语句可以组合使用,以实现更复杂的查询。

复合语句中如需引用子查询的结果,需要为该结果设置别名,并使用管道符|传递给下一个子查询,同时在下一个子查询中使用$-引用该结果的别名。详情参见管道符

示例:

nebula> GO FROM "player100" OVER follow \
YIELD dst(edge) AS dstid, properties($$).name AS Name | \
GO FROM $-.dstid OVER follow YIELD dst(edge);

+-------------+
| dst(EDGE) |
+-------------+
| "player100" |
| "player102" |
| "player125" |
| "player100" |
+-------------+

管道符|仅适用于 nGQL,不适用于 OpenCypher 语句,即不能在 MATCH 语句中使用管道符。如果需要使用 MATCH 语句进行复合查询,可以使用 WITH 子句

示例:

nebula> MATCH (v:player)-->(v2:player) \
WITH DISTINCT v2 AS v2, v2.player.age AS Age \
ORDER BY Age \
WHERE Age<25 \
RETURN v2.player.name AS Name, Age;
+----------------------+-----+
| Name | Age |
+----------------------+-----+
| "Luka Doncic" | 20 |
| "Ben Simmons" | 22 |
| "Kristaps Porzingis" | 23 |
+----------------------+-----+

更多信息