nGQL 命令汇总¶
函数¶
-
函数 说明 double abs(double x) 返回 x 的绝对值。 double floor(double x) 返回小于或等于 x 的最大整数。 double ceil(double x) 返回大于或等于 x 的最小整数。 double round(double x) 返回离 x 最近的整数值,如果 x 恰好在中间,则返回离 0 较远的整数。 double sqrt(double x) 返回 x 的平方根。 double cbrt(double x) 返回 x 的立方根。 double hypot(double x, double y) 返回直角三角形(直角边长为 x 和 y)的斜边长。 double pow(double x, double y) 返回 xy 的值。 double exp(double x) 返回 ex 的值。 double exp2(double x) 返回 2x 的值。 double log(double x) 返回以自然数 e 为底 x 的对数。 double log2(double x) 返回以 2 为底 x 的对数。 double log10(double x) 返回以 10 为底 x 的对数。 double sin(double x) 返回 x 的正弦值。 double asin(double x) 返回 x 的反正弦值。 double cos(double x) 返回 x 的余弦值。 double acos(double x) 返回 x 的反余弦值。 double tan(double x) 返回 x 的正切值。 double atan(double x) 返回 x 的反正切值。 double rand() 返回 [0,1) 内的随机浮点数。 int rand32(int min, int max) 返回 [min, max)
内的一个随机 32 位整数。 用户可以只传入一个参数,该参数会判定为max
,此时min
默认为0
。 如果不传入参数,此时会从带符号的 32 位 int 范围内随机返回。int rand64(int min, int max) 返回 [min, max)
内的一个随机 64 位整数。 用户可以只传入一个参数,该参数会判定为max
,此时min
默认为0
。 如果不传入参数,此时会从带符号的 64 位 int 范围内随机返回。collect() 将收集的所有值放在一个列表中。 avg() 返回参数的平均值。 count() 返回参数的数量。 max() 返回参数的最大值。 min() 返回参数的最小值。 std() 返回参数的总体标准差。 sum() 返回参数的和。 bit_and() 逐位做 AND 操作。 bit_or() 逐位做 OR 操作。 bit_xor() 逐位做 XOR 操作。 int size() 返回列表或映射中元素的数量。 int range(int start, int end, int step) 返回 [start,end]
中指定步长的值组成的列表。步长step
默认为 1。int sign(double x) 返回 x 的正负号。 如果 x 为 0
,则返回0
。 如果 x 为负数,则返回-1
。 如果 x 为正数,则返回1
。double e() 返回自然对数的底 e(2.718281828459045)。 double pi() 返回数学常数π(3.141592653589793)。 double radians() 将角度转换为弧度。 radians(180)
返回3.141592653589793
。
-
函数 说明 int strcasecmp(string a, string b) 比较两个字符串(不区分大小写)。当 a=b 时,返回 0,当 a>b 是,返回大于 0 的数,当 a<b 时,返回小于 0 的数。 string lower(string a) 返回小写形式的字符串。 string toLower(string a) 和 lower()
相同。string upper(string a) 返回大写形式的字符串。 string toUpper(string a) 和 upper()
相同。int length(string a) 以字节为单位,返回给定字符串的长度。 string trim(string a) 删除字符串头部和尾部的空格。 string ltrim(string a) 删除字符串头部的空格。 string rtrim(string a) 删除字符串尾部的空格。 string left(string a, int count) 返回字符串左侧 count
个字符组成的子字符串。如果count
超过字符串 a 的长度,则返回字符串 a。string right(string a, int count) 返回字符串右侧 count
个字符组成的子字符串。如果count
超过字符串 a 的长度,则返回字符串 a。string lpad(string a, int size, string letters) 在字符串 a 的左侧填充 letters
字符串,并返回size
长度的字符串。string rpad(string a, int size, string letters) 在字符串 a 的右侧填充 letters
字符串,并返回size
长度的字符串。string substr(string a, int pos, int count) 从字符串 a 的指定位置 pos
开始(不包括pos
位置的字符),提取右侧的count
个字符,组成新的字符串并返回。string substring(string a, int pos, int count) 和 substr()
相同。string reverse(string) 逆序返回字符串。 string replace(string a, string b, string c) 将字符串 a 中的子字符串 b 替换为字符串 c。 list split(string a, string b) 在子字符串 b 处拆分字符串 a,返回一个字符串列表。 string toString() 将任意数据类型转换为字符串类型。 int hash() 获取任意对象的哈希值。
-
函数 说明 int now() 根据当前系统返回当前时区的时间戳。 timestamp timestamp() 根据当前系统返回当前时区的时间戳。 date date() 根据当前系统返回当前日期(UTC 时间)。 time time() 根据当前系统返回当前时间(UTC 时间)。 datetime datetime() 根据当前系统返回当前日期和时间(UTC 时间)。
-
-
原生 nGQL 语句适用
函数 说明 id(vertex) 返回点 ID。数据类型和点 ID 的类型保持一致。 map properties(vertex) 返回点的所有属性。 map properties(edge) 返回边的所有属性。 string type(edge) 返回边的 Edge type。 src(edge) 返回边的起始点 ID。数据类型和点 ID 的类型保持一致。 dst(edge) 返回边的目的点 ID。数据类型和点 ID 的类型保持一致。 int rank(edge) 返回边的 rank。 vertex 返回点的信息。包括点 ID、Tag、属性和值。 edge 返回边的信息。包括 Edge type、起始点 ID、目的点 ID、rank、属性和值。 vertices 返回子图中的点的信息。详情参见 GET SUBGRAPH。 edges 返回子图中的边的信息。详情参见 GET SUBGRAPH。 path 返回路径信息。详情参见 FIND PATH。
-
openCypher 兼容语句适用
函数 说明 id(<vertex>) 返回点 ID。数据类型和点 ID 的类型保持一致。 list tags(<vertex>) 返回点的 Tag,与 labels() 作用相同。 list labels(<vertex>) 返回点的 Tag,与 tags() 作用相同,用于兼容 openCypher 语法。 map properties(<vertex_or_edge>) 返回点或边的所有属性。 string type(<edge>) 返回边的 Edge type。 src(<edge>) 返回边的起始点 ID。数据类型和点 ID 的类型保持一致。 dst(<edge>) 返回边的目的点 ID。数据类型和点 ID 的类型保持一致。 vertex startNode(<path>) 获取一条边或一条路径并返回它的起始点 ID。 string endNode(<path>) 获取一条边或一条路径并返回它的目的点 ID。 int rank(<edge>) 返回边的 rank。
-
-
函数 说明 keys(expr) 返回一个列表,包含字符串形式的点、边或映射的所有属性。 labels(vertex) 返回点的 Tag 列表。 nodes(path) 返回路径中所有点的列表。 range(start, end [, step]) 返回 [start,end]
范围内固定步长的列表,默认步长step
为 1。relationships(path) 返回路径中所有关系的列表。 reverse(list) 返回将原列表逆序排列的新列表。 tail(list) 返回不包含原列表第一个元素的新列表。 head(list) 返回列表的第一个元素。 last(list) 返回列表的最后一个元素。 coalesce(list) 返回列表中第一个非空元素。 reduce() 请参见 reduce 函数。
-
函数 说明 count() 语法: count({expr | *})
。count()
返回总行数(包括 NULL)。
count(expr)
返回满足表达式的非空值的总数。
count()
和size()
是不同的。
-
函数 说明 collect() collect()
函数返回一个符合表达式返回结果的列表。该函数可以将多条记录或值合并进一个列表,实现数据聚合。
-
函数 语法 说明 reduce() reduce(<accumulator> = <initial>, <variable> IN <list>
reduce()
将表达式逐个应用于列表中的元素,然后和累加器中的当前结果累加,最后返回完整结果。
-
函数 说明 hash() hash()
函数返回参数的哈希值。其参数可以是数字、字符串、列表、布尔值、NULL 等类型的值,或者计算结果为这些类型的表达式。hash()
函数采用 MurmurHash2 算法,种子(seed)为0xc70f6907UL
。用户可以在MurmurHash2.h
中查看其源代码。
-
函数 说明 concat() concat()
函数至少需要两个或以上字符串参数,并将所有参数连接成一个字符串。
语法:concat(string1,string2,...)
-
函数 说明 concat_ws() concat_ws()
函数将两个或以上字符串参数与预定义的分隔符(separator)相连接。
-
谓词函数只返回
true
或false
,通常用于WHERE
子句中。<predicate>(<variable> IN <list> WHERE <condition>)
函数 说明 exists() 如果指定的属性在点、边或映射中存在,则返回 true
,否则返回false
。any() 如果指定的谓词适用于列表中的至少一个元素,则返回 true
,否则返回false
。all() 如果指定的谓词适用于列表中的每个元素,则返回 true
,否则返回false
。none() 如果指定的谓词不适用于列表中的任何一个元素,则返回 true
,否则返回false
。single() 如果指定的谓词适用于列表中的唯一一个元素,则返回 true
,否则返回false
。
-
CASE
表达式使用条件来过滤 nGQL 查询语句的结果,常用于YIELD
和RETURN
子句中。CASE
表达式会遍历所有条件,并在满足第一个条件时停止读取后续条件,然后返回结果。如果不满足任何条件,将通过ELSE
子句返回结果。如果没有ELSE
子句且不满足任何条件,则返回NULL
。语法:
CASE <comparer> WHEN <value> THEN <result> [WHEN ...] [ELSE <default>] END
参数 说明 comparer
用于与 value
进行比较的值或者有效表达式。value
和 comparer
进行比较,如果匹配,则满足此条件。result
如果 value
匹配comparer
,则返回该result
。default
如果没有条件匹配,则返回该 default
。
通用查询语句¶
-
MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];
模式 示例 说明 匹配点 (v)
用户可以在一对括号中使用自定义变量来表示模式中的点。例如 (v)
。匹配 Tag MATCH (v:player) RETURN v
用户可以在点的右侧用 :<tag_name>
表示模式中的 Tag。匹配多 Tag MATCH (v:player:team) RETURN v LIMIT 10
用户可以用英文冒号(:)匹配多 Tag 的点。 匹配点的属性 MATCH (v:player{name:"Tim Duncan"}) RETURN v
用户可以在 Tag 的右侧用 {<prop_name>: <prop_value>}
表示模式中点的属性。匹配单点 ID MATCH (v) WHERE id(v) == 'player101' RETURN v
用户可以使用点 ID 去匹配点。 id()
函数可以检索点的 ID。匹配多点 ID MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2
要匹配多个点的 ID,可以用 WHERE id(v) IN [vid_list]
。匹配连接的点 MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.player.name AS Name
用户可以使用 --
符号表示两个方向的边,并匹配这些边连接的点。用户可以在--
符号上增加<
或>
符号指定边的方向。匹配路径 MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p
连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。 匹配边 MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e
MATCH ()<-[e]-() RETURN e LIMIT 3
除了用 --
、-->
、<--
表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如-[e]-
。匹配 Edge type MATCH ()-[e:follow]->() RETURN e LIMIT 5
和点一样,用户可以用 :<edge_type>
表示模式中的 Edge type,例如-[e:follow]-
。匹配边的属性 MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e
用户可以用 {<prop_name>: <prop_value>}
表示模式中 Edge type 的属性,例如[e:follow{likeness:95}]
。匹配多个 Edge type MATCH (v:player{name:"Tim Duncan"})-[e:follow | :serve]->(v2) RETURN e
使用 |
可以匹配多个 Edge type,例如[e:follow | :serve]
。第一个 Edge type 前的英文冒号(:)不可省略,后续 Edge type 前的英文冒号可以省略,例如[e:follow | serve]
。匹配多条边 MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3
用户可以扩展模式,匹配路径中的多条边。 匹配定长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends
用户可以在模式中使用 :<edge_type>*<hop>
匹配定长路径。hop
必须是一个非负整数。e
的数据类型是列表。匹配变长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*1..3]->(v2) RETURN v2 AS Friends
minHop
:可选项。表示路径的最小长度。minHop
必须是一个非负整数,默认值为 1。maxHop
:可选项。表示路径的最大长度。maxHop
必须是一个非负整数,默认为无穷大。e
的数据类型是列表。匹配多个 Edge type 的变长路径 MATCH p=(v:player{name:"Tim Duncan"})-[e:follow | serve*2]->(v2) RETURN DISTINCT v2
用户可以在变长或定长模式中指定多个 Edge type。 hop
、minHop
和maxHop
对所有 Edge type 都生效。e
的数据类型是列表。检索点或边的信息 MATCH (v:player{name:"Tim Duncan"}) RETURN v
MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e
使用 RETURN {<vertex_name> | <edge_name>}
检索点或边的所有信息。检索点 ID MATCH (v:player{name:"Tim Duncan"}) RETURN id(v)
使用 id()
函数检索点 ID。检索 Tag MATCH (v:player{name:"Tim Duncan"}) RETURN labels(v)
使用 labels()
函数检索点上的 Tag 列表。
检索列表labels(v)
中的第 N 个元素,可以使用labels(v)[n-1]
。检索点或边的单个属性 MATCH (v:player{name:"Tim Duncan"}) RETURN v.player.age
使用 RETURN {<vertex_name> | <edge_name>}.<property>
检索单个属性。
使用AS
设置属性的别名。检索点或边的所有属性 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2)
使用 properties()
函数检索点或边的所有属性。检索 Edge type MATCH p=(v:player{name:"Tim Duncan"})-[e]->() RETURN DISTINCT type(e)
使用 type()
函数检索匹配的 Edge type。检索路径 MATCH p=(v:player{name:"Tim Duncan"})-[*3]->() RETURN p
使用 RETURN <path_name>
检索匹配路径的所有信息。检索路径中的点 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN nodes(p)
使用 nodes()
函数检索路径中的所有点。检索路径中的边 MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN relationships(p)
使用 relationships()
函数检索路径中的所有边。检索路径长度 MATCH p=(v:player{name:"Tim Duncan"})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length
使用 length()
函数检索路径的长度。
- OPTIONAL MATCH
模式 示例 说明 作为MATCH语句的可选项去匹配图数据库中的模式 MATCH (m)-[]->(n) WHERE id(m)=="player100" OPTIONAL MATCH (n)-[]->(l) WHERE id(n)=="player125" RETURN id(m),id(n),id(l)
如果图数据库中没有对应的模式,对应的列返回NULL。
-
LOOKUP ON {<vertex_tag> | <edge_type>} [WHERE <expression> [AND <expression> ...]] YIELD <return_list> [AS <alias>]
模式 示例 说明 检索点 LOOKUP ON player WHERE player.name == "Tony Parker" YIELD player.name AS name, player.age AS age
返回 Tag 为 player
且name
为Tony Parker
的点。检索边 LOOKUP ON follow WHERE follow.degree == 90 YIELD follow.degree
返回 Edge type 为 follow
且degree
为90
的边。通过 Tag 列出所有点 LOOKUP ON player YIELD properties(vertex),id(vertex)
查找所有 Tag 为 player
的点 VID。通过 Edge type 列出边 LOOKUP ON like YIELD edge AS e
查找 Edge type 为 like
的所有边的信息。统计点 LOOKUP ON player YIELD id(vertex)| YIELD COUNT(*) AS Player_Count
统计 Tag 为 player
的点。统计边 LOOKUP ON like YIELD id(vertex)| YIELD COUNT(*) AS Like_Count
统计 Edge type 为 like
的边。
-
GO [[<M> TO] <N> STEPS ] FROM <vertex_list> OVER <edge_type_list> [{REVERSELY | BIDIRECT}] [ WHERE <conditions> ] YIELD [DISTINCT] <return_list> [{SAMPLE <sample_list> | LIMIT <limit_list>}] [| GROUP BY {col_name | expr | position} YIELD <col_name>] [| ORDER BY <expression> [{ASC | DESC}]] [| LIMIT [<offset_value>,] <number_rows>]
示例 说明 GO FROM "player102" OVER serve YIELD dst(edge)
返回 player102 所属队伍。 GO 2 STEPS FROM "player102" OVER follow YIELD dst(edge)
返回距离 player102 两跳的朋友。 GO FROM "player100", "player102" OVER serve WHERE properties(edge).start_year > 1995 YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name
添加过滤条件。 GO FROM "player100" OVER follow, serve YIELD properties(edge).degree, properties(edge).start_year
遍历多个 Edge type。属性没有值时,会显示 UNKNOWN_PROP
。GO FROM "player100" OVER follow REVERSELY YIELD src(edge) AS destination
返回 player100 入方向的邻居点。 GO FROM "player100" OVER follow REVERSELY YIELD src(edge) AS id | GO FROM $-.id OVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team
查询 player100 的朋友和朋友所属队伍。 GO FROM "player102" OVER follow YIELD dst(edge) AS both
返回 player102 所有邻居点。 GO 2 STEPS FROM "player100" OVER follow YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age | GROUP BY $-.dst YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age
根据年龄分组。
-
-
获取点的属性值
FETCH PROP ON {<tag_name>[, tag_name ...] | *} <vid> [, vid ...] YIELD <return_list> [AS <alias>]
示例 说明 FETCH PROP ON player "player100" YIELD properties(vertex)
在 FETCH
语句中指定 Tag 获取对应点的属性值。FETCH PROP ON player "player100" YIELD player.name AS name
使用 YIELD
子句指定返回的属性。FETCH PROP ON player "player101", "player102", "player103" YIELD properties(vertex)
指定多个点 ID 获取多个点的属性值,点之间用英文逗号(,)分隔。 FETCH PROP ON player, t1 "player100", "player103" YIELD properties(vertex)
在 FETCH
语句中指定多个 Tag 获取属性值。Tag 之间用英文逗号(,)分隔。FETCH PROP ON * "player100", "player106", "team200" YIELD properties(vertex)
在 FETCH
语句中使用*
获取当前图空间所有标签里,点的属性值。
-
获取边的属性值
FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...] YIELD <output>;
示例 说明 FETCH PROP ON serve "player100" -> "team204" YIELD properties(edge)
获取连接 player100 和 team204 的边 serve 的所有属性值。 FETCH PROP ON serve "player100" -> "team204" YIELD serve.start_year
使用 YIELD
子句指定返回的属性。FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202" YIELD properties(edge)
指定多个边模式 ( <src_vid> -> <dst_vid>[@<rank>]
) 获取多个边的属性值。模式之间用英文逗号(,)分隔。FETCH PROP ON serve "player100" -> "team204"@1 YIELD properties(edge)
要获取 rank 不为 0 的边,请在 FETCH 语句中设置 rank。 GO FROM "player101" OVER follow YIELD follow._src AS s, follow._dst AS d | FETCH PROP ON follow $-.s -> $-.d YIELD follow.degree
返回从点 player101 开始的 follow 边的 degree 值。 $var = GO FROM "player101" OVER follow YIELD follow._src AS s, follow._dst AS d; FETCH PROP ON follow $var.s -> $var.d YIELD follow.degree
自定义变量构建查询。
-
-
SHOW
语句 语法 示例 说明 SHOW CHARSET SHOW CHARSET
SHOW CHARSET
显示当前的字符集。 SHOW COLLATION SHOW COLLATION
SHOW COLLATION
显示当前的排序规则。 SHOW CREATE SPACE SHOW CREATE SPACE <space_name>
SHOW CREATE SPACE basketballplayer
显示指定图空间的创建语句。 SHOW CREATE TAG/EDGE SHOW CREATE {TAG <tag_name> | EDGE <edge_name>}
SHOW CREATE TAG player
显示指定 Tag/Edge type 的基本信息。 SHOW HOSTS SHOW HOSTS [GRAPH | STORAGE | META]
SHOW HOSTS
SHOW HOSTS GRAPH
显示 Graph、Storage、Meta 服务主机信息、版本信息。 SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS
SHOW TAG INDEX STATUS
重建原生索引的作业状态,以便确定重建索引是否成功。 SHOW INDEXES SHOW {TAG | EDGE} INDEXES
SHOW TAG INDEXES
列出当前图空间内的所有 Tag 和 Edge type(包括属性)的索引。 SHOW PARTS SHOW PARTS [<part_id>]
SHOW PARTS
显示图空间中指定分片或所有分片的信息。 SHOW ROLES SHOW ROLES IN <space_name>
SHOW ROLES in basketballplayer
显示分配给用户的角色信息。 SHOW SNAPSHOTS SHOW SNAPSHOTS
SHOW SNAPSHOTS
显示所有快照信息。 SHOW SPACES SHOW SPACES
SHOW SPACES
显示现存的图空间。 SHOW STATS SHOW STATS
SHOW STATS
显示最近 STATS
作业收集的图空间统计信息。SHOW TAGS/EDGES SHOW TAGS | EDGES
SHOW TAGS
、SHOW EDGES
显示当前图空间内的所有 Tag/Edge type。 SHOW USERS SHOW USERS
SHOW USERS
显示用户信息。 SHOW SESSIONS SHOW SESSIONS
SHOW SESSIONS
显示所有会话信息。 SHOW SESSIONS SHOW SESSION <Session_Id>
SHOW SESSION 1623304491050858
指定会话 ID 进行查看。 SHOW QUERIES SHOW [ALL] QUERIES
SHOW QUERIES
查看当前 Session 中正在执行的查询请求信息。 SHOW META LEADER SHOW META LEADER
SHOW META LEADER
显示当前 Meta 集群的 leader 信息。
子句和选项¶
子句 | 语法 | 示例 | 说明 |
---|---|---|---|
GROUP BY | GROUP BY <var> YIELD <var>, <aggregation_function(var)> |
GO FROM "player100" OVER follow BIDIRECT YIELD $$.player.name as Name | GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count |
查找所有连接到 player100 的点,并根据他们的姓名进行分组,返回姓名的出现次数。 |
LIMIT | YIELD <var> [| LIMIT [<offset_value>,] <number_rows>] |
GO FROM "player100" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age | ORDER BY $-.Age, $-.Friend | LIMIT 1, 3 |
从排序结果中返回第 2 行开始的 3 行数据。 |
SKIP | RETURN <var> [SKIP <offset>] [LIMIT <number_rows>] |
MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.player.name AS Name, v2.player.age AS Age ORDER BY Age DESC SKIP 1 |
用户可以单独使用SKIP <offset> 设置偏移量,后面不需要添加LIMIT <number_rows> 。 |
SAMPLE | <go_statement> SAMPLE <sample_list>; |
GO 3 STEPS FROM "player100" OVER * YIELD properties($$).name AS NAME, properties($$).age AS Age SAMPLE [1,2,3]; |
在结果集中均匀取样并返回指定数量的数据。 |
ORDER BY | <YIELD clause> ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...] |
FETCH PROP ON player "player100", "player101", "player102", "player103" YIELD player.age AS age, player.name AS name | ORDER BY $-.age ASC, $-.name DESC |
ORDER BY 子句指定输出结果的排序规则。 |
RETURN | RETURN {<vertex_name>|<edge_name>|<vertex_name>.<property>|<edge_name>.<property>|...} |
MATCH (v:player) RETURN v.player.name, v.player.age LIMIT 3 |
返回点的属性为name 和age 的前三行值。 |
TTL | CREATE TAG <tag_name>(<property_name_1> <property_value_1>, <property_name_2> <property_value_2>, ...) ttl_duration= <value_int>, ttl_col = <property_name> |
CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = "a" |
创建 Tag 并设置 TTL 选项。 |
WHERE | WHERE {<vertex|edge_alias>.<property_name> {>|==|<|...} <value>...} |
MATCH (v:player) WHERE v.player.name == "Tim Duncan" XOR (v.player.age < 30 AND v.player.name == "Yao Ming") OR NOT (v.player.name == "Yao Ming" OR v.player.name == "Tim Duncan") RETURN v.player.name, v.player.age |
WHERE 子句可以根据条件过滤输出结果,通常用于GO 和LOOKUP 语句,MATCH 和WITH 语句。 |
YIELD | YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...] [WHERE <conditions>]; |
GO FROM "player100" OVER follow YIELD dst(edge) AS ID | FETCH PROP ON player $-.ID YIELD player.age AS Age | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends |
查找 player100 关注的 player,并计算他们的平均年龄。 |
WITH | MATCH $expressions WITH {nodes()|labels()|...} |
MATCH p=(v:player{name:"Tim Duncan"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1 |
WITH 子句可以获取并处理查询前半部分的结果,并将处理结果作为输入传递给查询的后半部分。 |
UNWIND | UNWIND <list> AS <alias> <RETURN clause> |
UNWIND [1,2,3] AS n RETURN n |
拆分列表。 |
图空间语句¶
语句 | 语法 | 示例 | 说明 |
---|---|---|---|
CREATE SPACE | CREATE SPACE [IF NOT EXISTS] <graph_space_name> ( [partition_num = <partition_number>,] [replica_factor = <replica_number>,] vid_type = {FIXED_STRING(<N>) | INT[64]} ) [COMMENT = '<comment>'] |
CREATE SPACE my_space_1 (vid_type=FIXED_STRING(30)) |
创建一个新的图空间。 |
CREATE SPACE | CREATE SPACE <new_graph_space_name> AS <old_graph_space_name> |
CREATE SPACE my_space_4 as my_space_3 |
克隆现有图空间的 Schema。 |
USE | USE <graph_space_name> |
USE space1 |
指定一个图空间,或切换到另一个图空间,将其作为后续查询的工作空间。 |
SHOW SPACES | SHOW SPACES |
SHOW SPACES |
列出 Nebula Graph 示例中的所有图空间。 |
DESCRIBE SPACE | DESC[RIBE] SPACE <graph_space_name> |
DESCRIBE SPACE basketballplayer |
显示指定图空间的信息。 |
CLEAR SPACE | CLEAR SPACE [IF EXISTS] <graph_space_name> |
清空图空间中的点和边,但不会删除图空间本身以及其中的 Schema 信息。 | |
DROP SPACE | DROP SPACE [IF EXISTS] <graph_space_name> |
DROP SPACE basketballplayer |
删除指定图空间的所有内容。 |
TAG 语句¶
语句 | 语法 | 示例 | 说明 |
---|---|---|---|
CREATE TAG | CREATE TAG [IF NOT EXISTS] <tag_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] |
CREATE TAG woman(name string, age int, married bool, salary double, create_time timestamp) TTL_DURATION = 100, TTL_COL = "create_time" |
通过指定名称创建一个 Tag。 |
DROP TAG | DROP TAG [IF EXISTS] <tag_name> |
DROP TAG test; |
删除当前工作空间内所有点上的指定 Tag。 |
ALTER TAG | ALTER TAG <tag_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] |
ALTER TAG t1 ADD (p3 int, p4 string) |
修改 Tag 的结构。例如增删属性、修改数据类型,也可以为属性设置、修改 TTL(Time-To-Live)。 |
SHOW TAGS | SHOW TAGS |
SHOW TAGS |
显示当前图空间内的所有 Tag 名称。 |
DESCRIBE TAG | DESC[RIBE] TAG <tag_name> |
DESCRIBE TAG player |
查看指定 Tag 的详细信息,例如字段名称、数据类型等。 |
DELETE TAG | DELETE TAG <tag_name_list> FROM <VID> |
DELETE TAG test1 FROM "test" |
删除指定点上的指定 Tag。 |
Edge type 语句¶
语句 | 语法 | 示例 | 说明 |
---|---|---|---|
CREATE EDGE | CREATE EDGE [IF NOT EXISTS] <edge_type_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] |
CREATE EDGE e1(p1 string, p2 int, p3 timestamp) TTL_DURATION = 100, TTL_COL = "p2" |
指定名称创建一个 Edge type。 |
DROP EDGE | DROP EDGE [IF EXISTS] <edge_type_name> |
DROP EDGE e1 |
删除当前工作空间内的指定 Edge type。 |
ALTER EDGE | ALTER EDGE <edge_type_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] |
ALTER EDGE e1 ADD (p3 int, p4 string) |
修改 Edge type 的结构。 |
SHOW EDGES | SHOW EDGES |
SHOW EDGES |
显示当前图空间内的所有 Edge type 名称。 |
DESCRIBE EDGE | DESC[RIBE] EDGE <edge_type_name> |
DESCRIBE EDGE follow |
查看指定 Edge type 的详细信息,例如字段名称、数据类型等。 |
点语句¶
语句 | 语法 | 示例 | 说明 |
---|---|---|---|
INSERT VERTEX | INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES <vid>: ([prop_value_list]) |
INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8) |
在 Nebula Graph 实例的指定图空间中插入一个或多个点。 |
DELETE VERTEX | DELETE VERTEX <vid> [, <vid> ...] |
DELETE VERTEX "team1" |
删除点,以及点关联的出边和入边。 |
UPDATE VERTEX | UPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] |
UPDATE VERTEX ON player "player101" SET age = age + 2 |
修改点上 Tag 的属性值。 |
UPSERT VERTEX | UPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] |
UPSERT VERTEX ON player "player667" SET age = 31 |
结合UPDATE 和INSERT ,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 |
边语句¶
语句 | 语法 | 示例 | 说明 |
---|---|---|---|
INSERT EDGE | INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ) [, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...] |
INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 1) |
在 Nebula Graph 实例的指定图空间中插入一条或多条边。 |
DELETE EDGE | DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...] |
DELETE EDGE serve "player100" -> "team204"@0 |
删除边。一次可以删除一条或多条边。 |
UPDATE EDGE | UPDATE EDGE ON <edge_type> <src_vid> -> <dst_vid> [@<rank>] SET <update_prop> [WHEN <condition>] [YIELD <output>] |
UPDATE EDGE ON serve "player100" -> "team204"@0 SET start_year = start_year + 1 |
修改边上 Edge type 的属性。 |
UPSERT EDGE | UPSERT EDGE ON <edge_type> <src_vid> -> <dst_vid> [@rank] SET <update_prop> [WHEN <condition>] [YIELD <properties>] |
UPSERT EDGE on serve "player666" -> "team200"@0 SET end_year = 2021 |
结合UPDATE 和INSERT ,如果边存在,会更新边的属性;如果边不存在,会插入新的边。 |
索引¶
-
原生索引
索引配合
LOOKUP
和MATCH
语句使用。语句 语法 示例 说明 CREATE INDEX CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT = '<comment>']
CREATE TAG INDEX player_index on player()
对 Tag、EdgeType 或其属性创建原生索引。 SHOW CREATE INDEX SHOW CREATE {TAG | EDGE} INDEX <index_name>
show create tag index index_2
创建 Tag 或者 Edge type 时使用的 nGQL 语句,其中包含索引的详细信息,例如其关联的属性。 SHOW INDEXES SHOW {TAG | EDGE} INDEXES
SHOW TAG INDEXES
列出当前图空间内的所有 Tag 和 Edge type(包括属性)的索引。 DESCRIBE INDEX DESCRIBE {TAG | EDGE} INDEX <index_name>
DESCRIBE TAG INDEX player_index_0
查看指定索引的信息,包括索引的属性名称(Field)和数据类型(Type)。 REBUILD INDEX REBUILD {TAG | EDGE} INDEX [<index_name_list>]
REBUILD TAG INDEX single_person_index
重建索引。索引功能不会自动对其创建之前已存在的存量数据生效。 SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS
SHOW TAG INDEX STATUS
查看索引名称和对应的状态。 DROP INDEX DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name>
DROP TAG INDEX player_index_0
删除当前图空间中已存在的索引。
-
语法 示例 说明 SIGN IN TEXT SERVICE [(<elastic_ip:port> [,<username>, <password>]), (<elastic_ip:port>), ...]
SIGN IN TEXT SERVICE (127.0.0.1:9200)
Nebula Graph 的全文索引是基于 Elasticsearch 实现,部署 Elasticsearch 集群之后,可以使用 SIGN IN
语句登录 Elasticsearch 客户端。SHOW TEXT SEARCH CLIENTS
SHOW TEXT SEARCH CLIENTS
列出文本搜索客户端。 SIGN OUT TEXT SERVICE
SIGN OUT TEXT SERVICE
退出所有文本搜索客户端。 CREATE FULLTEXT {TAG | EDGE} INDEX <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>])
CREATE FULLTEXT TAG INDEX nebula_index_1 ON player(name)
创建全文索引。 SHOW FULLTEXT INDEXES
SHOW FULLTEXT INDEXES
显示全文索引。 REBUILD FULLTEXT INDEX
REBUILD FULLTEXT INDEX
重建全文索引。 DROP FULLTEXT INDEX <index_name>
DROP FULLTEXT INDEX nebula_index_1
删除全文索引。 LOOKUP ON {<tag> | <edge_type>} WHERE <expression> [YIELD <return_list>]
LOOKUP ON player WHERE FUZZY(player.name, "Tim Dunncan", AUTO, OR) YIELD player.name
使用查询选项。
子图和路径¶
类型 | 语法 | 示例 | 说明 |
---|---|---|---|
子图 | GET SUBGRAPH [WITH PROP] [<step_count> STEPS] FROM {<vid>, <vid>...} [{IN | OUT | BOTH} <edge_type>, <edge_type>...] YIELD [VERTICES AS <vertex_alias>] [,EDGES AS <edge_alias>] |
GET SUBGRAPH 1 STEPS FROM "player100" YIELD VERTICES AS nodes, EDGES AS relationships |
指定 Edge type 的起始点可以到达的点和边的信息,返回子图信息。 |
路径 | FIND { SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list> OVER <edge_type_list> [REVERSELY | BIDIRECT] [<WHERE clause>] [UPTO <N> STEPS] YIELD path as <alias> [| ORDER BY $-.path] [| LIMIT <M>] |
FIND SHORTEST PATH FROM "player102" TO "team204" OVER * YIELD path as p |
查找指定起始点和目的点之间的路径。返回的路径格式类似于(<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id) 。 |
查询调优¶
类型 | 语法 | 示例 | 说明 |
---|---|---|---|
EXPLAIN | EXPLAIN [format="row" | "dot"] <your_nGQL_statement> |
EXPLAIN format="row" SHOW TAGS EXPLAIN format="dot" SHOW TAGS |
输出 nGQL 语句的执行计划,但不会执行 nGQL 语句。 |
PROFILE | PROFILE [format="row" | "dot"] <your_nGQL_statement> |
PROFILE format="row" SHOW TAGS EXPLAIN format="dot" SHOW TAGS |
执行 nGQL 语句,然后输出执行计划和执行概要。 |
运维¶
-
语法 说明 BALANCE LEADER
在当前图空间内启动任务均衡分布 leader。该命令会返回任务 ID。
-
语法 说明 SUBMIT JOB COMPACT
触发 RocksDB 的长耗时 compact
操作。SUBMIT JOB FLUSH
将内存中的 RocksDB memfile 写入硬盘。 SUBMIT JOB STATS
启动一个作业,该作业对当前图空间进行统计。作业完成后,用户可以使用 SHOW STATS
语句列出统计结果。SHOW JOB <job_id>
显示当前图空间内指定作业和相关任务的信息。Meta 服务将 SUBMIT JOB
请求解析为多个任务,然后分配给进程 nebula-storaged。SHOW JOBS
列出当前图空间内所有未过期的作业。 STOP JOB
停止当前图空间内未完成的作业。 RECOVER JOB
重新执行当前图空间内失败的作业,并返回已恢复的作业数量。
-
语法 示例 说明 KILL QUERY (session=<session_id>, plan=<plan_id>)
KILL QUERY(SESSION=1625553545984255,PLAN=163)
在一个会话中执行命令终止另一个会话中的查询。
最后更新:
March 7, 2023