Schema 相关函数¶
本文介绍 NebulaGraph 支持的 Schema 相关的函数。
Schema 相关的函数分为两类:
原生 nGQL 语句适用¶
原生 nGQL 语句的YIELD
和WHERE
子句中可以使用如下介绍的函数。
Note
由于 vertex、edge、vertices、edges、path 属于关键字,使用时需要用AS <alias>
设置别名才能正常使用。例如GO FROM "player100" OVER follow YIELD edge AS e;
。
id(vertex)¶
id(vertex) 返回点 ID。
语法:id(vertex)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> LOOKUP ON player WHERE player.age > 45 YIELD id(vertex);
+-------------+
| id(VERTEX) |
+-------------+
| "player144" |
| "player140" |
+-------------+
properties(vertex)¶
properties(vertex) 返回点的所有属性。
语法:properties(vertex)
- 返回类型:map。
示例:
nebula> LOOKUP ON player WHERE player.age > 45 \
YIELD properties(vertex);
+-------------------------------------+
| properties(VERTEX) |
+-------------------------------------+
| {age: 47, name: "Shaquille O'Neal"} |
| {age: 46, name: "Grant Hill"} |
+-------------------------------------+
用户也可以使用属性引用符($^
和$$
)替代函数properties()
中的vertex
参数来获取点的所有属性。
$^
表示探索开始时的点数据。例如GO FROM "player100" OVER follow reversely YIELD properties($^)
中,$^
指player100
这个点。
$$
表示探索结束的终点数据。
properties($^)
和properties($$)
一般用于GO
语句中。更多信息,请参见属性引用符。
Caution
用户可以通过properties().<property_name>
来获取点的指定属性。但是不建议使用这种方式获取指定属性,因为properties()
函数返回所有属性,这样会降低查询性能。
properties(edge)¶
properties(edge) 返回边的所有属性。
语法:properties(edge)
- 返回类型:map。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD properties(edge);
+------------------+
| properties(EDGE) |
+------------------+
| {degree: 95} |
| {degree: 95} |
+------------------+
Warning
用户可以通过properties(edge).<property_name>
来获取边的指定属性。但是不建议使用这种方式获取指定属性,因为properties(edge)
函数返回边的所有属性,这样会降低查询性能。
type(edge)¶
type(edge) 返回边的 Edge type。
语法:type(edge)
- 返回类型:string。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD src(edge), dst(edge), type(edge), rank(edge);
+-------------+-------------+------------+------------+
| src(EDGE) | dst(EDGE) | type(EDGE) | rank(EDGE) |
+-------------+-------------+------------+------------+
| "player100" | "player101" | "follow" | 0 |
| "player100" | "player125" | "follow" | 0 |
+-------------+-------------+------------+------------+
src(edge)¶
src(edge) 返回边的起始点 ID。
语法:src(edge)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD src(edge), dst(edge);
+-------------+-------------+
| src(EDGE) | dst(EDGE) |
+-------------+-------------+
| "player100" | "player101" |
| "player100" | "player125" |
+-------------+-------------+
Note
src(edge) 和 properties($^
) 查找起始点的语义不同。src(edge) 始终表示图数据库中边的起始点 ID,而 properties($^
) 表示探索开始时的点数据,例如示例中GO FROM "player100"
中player100
这个点的数据。
dst(edge)¶
dst(edge) 返回边的目的点 ID。
语法:dst(edge)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD src(edge), dst(edge);
+-------------+-------------+
| src(EDGE) | dst(EDGE) |
+-------------+-------------+
| "player100" | "player101" |
| "player100" | "player125" |
+-------------+-------------+
Note
dst(edge) 始终表示图数据库中边的目的点 ID。
rank(edge)¶
rank(edge) 返回边的 rank。
语法:rank(edge)
- 返回类型:int。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD src(edge), dst(edge), rank(edge);
+-------------+-------------+------------+
| src(EDGE) | dst(EDGE) | rank(EDGE) |
+-------------+-------------+------------+
| "player100" | "player101" | 0 |
| "player100" | "player125" | 0 |
+-------------+-------------+------------+
vertex¶
vertex 返回点的信息。包括点 ID、Tag、属性和值。需要用AS <alias>
设置别名。
语法:vertex
示例:
nebula> LOOKUP ON player WHERE player.age > 45 YIELD vertex AS v;
+----------------------------------------------------------+
| v |
+----------------------------------------------------------+
| ("player144" :player{age: 47, name: "Shaquille O'Neal"}) |
| ("player140" :player{age: 46, name: "Grant Hill"}) |
+----------------------------------------------------------+
edge¶
edge 返回边的信息。包括 Edge type、起始点 ID、目的点 ID、rank、属性和值。需要用AS <alias>
设置别名。
语法:edge
示例:
nebula> GO FROM "player100" OVER follow YIELD edge AS e;
+----------------------------------------------------+
| e |
+----------------------------------------------------+
| [:follow "player100"->"player101" @0 {degree: 95}] |
| [:follow "player100"->"player125" @0 {degree: 95}] |
+----------------------------------------------------+
vertices¶
vertices 返回子图中的点的信息。详情参见 GET SUBGRAPH。
edges¶
edges 返回子图中的边的信息。详情参见 GET SUBGRAPH。
path¶
path 返回路径信息。详情参见 FIND PATH。
openCypher 兼容语句适用¶
openCypher 兼容语句的RETURN
和WHERE
子句中可以使用如下介绍的函数。
id()¶
id() 返回点 ID。
语法:id(<vertex>)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> MATCH (v:player) RETURN id(v);
+-------------+
| id(v) |
+-------------+
| "player129" |
| "player115" |
| "player106" |
| "player102" |
...
tags() 和labels()¶
tags() 和labels() 返回点的 Tag。
语法:tags(<vertex>)
、labels(<vertex>)
- 返回类型:list。
示例:
nebula> MATCH (v) WHERE id(v) == "player100" \
RETURN tags(v);
+------------+
| tags(v) |
+------------+
| ["player"] |
+------------+
properties()¶
properties() 返回点或边的所有属性。
语法:properties(<vertex_or_edge>)
- 返回类型:map。
示例:
nebula> MATCH (v:player)-[e:follow]-() RETURN properties(v),properties(e);
+---------------------------------------+---------------+
| properties(v) | properties(e) |
+---------------------------------------+---------------+
| {age: 31, name: "Stephen Curry"} | {degree: 90} |
| {age: 47, name: "Shaquille O'Neal"} | {degree: 100} |
| {age: 34, name: "LeBron James"} | {degree: 13} |
...
type()¶
type() 返回边的 Edge type。
语法:type(<edge>)
- 返回类型:string。
示例:
nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->() \
RETURN type(e);
+----------+
| type(e) |
+----------+
| "serve" |
| "follow" |
| "follow" |
+----------+
typeid()¶
typeid() 返回边的 Edge type 的内部 ID 值,可以用正负来判断方向。
语法:typeid(<edge>)
- 返回类型:int。
示例:
nebula> MATCH (v:player)-[e:follow]-(v2) RETURN e,typeid(e), \
CASE WHEN typeid(e) > 0 \
THEN "正向" ELSE "反向" END AS direction \
LIMIT 5;
+----------------------------------------------------+-----------+-----------+
| e | typeid(e) | direction |
+----------------------------------------------------+-----------+-----------+
| [:follow "player127"->"player114" @0 {degree: 90}] | 5 | "正向" |
| [:follow "player127"->"player148" @0 {degree: 70}] | 5 | "正向" |
| [:follow "player148"->"player127" @0 {degree: 80}] | -5 | "反向" |
| [:follow "player147"->"player136" @0 {degree: 90}] | 5 | "正向" |
| [:follow "player136"->"player147" @0 {degree: 90}] | -5 | "反向" |
+----------------------------------------------------+-----------+-----------+
src()¶
src() 返回边的起始点 ID。
语法:src(<edge>)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> MATCH ()-[e]->(v:player{name:"Tim Duncan"}) \
RETURN src(e);
+-------------+
| src(e) |
+-------------+
| "player125" |
| "player113" |
| "player102" |
...
dst()¶
dst() 返回边的目的点 ID。
语法:dst(<edge>)
- 返回类型:和点 ID 的类型保持一致。
示例:
nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->() \
RETURN dst(e);
+-------------+
| dst(e) |
+-------------+
| "team204" |
| "player101" |
| "player125" |
+-------------+
startNode()¶
startNode() 获取一条路径并返回它的起始点信息,包括点 ID、Tag、属性和值。
语法:startNode(<path>)
示例:
nebula> MATCH p = (a :player {name : "Tim Duncan"})-[r:serve]-(t) \
RETURN startNode(p);
+----------------------------------------------------+
| startNode(p) |
+----------------------------------------------------+
| ("player100" :player{age: 42, name: "Tim Duncan"}) |
+----------------------------------------------------+
endNode()¶
endNode() 获取一条路径并返回它的目的点信息,包括点 ID、Tag、属性和值。
语法:endNode(<path>)
示例:
nebula> MATCH p = (a :player {name : "Tim Duncan"})-[r:serve]-(t) \
RETURN endNode(p);
+----------------------------------+
| endNode(p) |
+----------------------------------+
| ("team204" :team{name: "Spurs"}) |
+----------------------------------+
rank()¶
rank() 返回边的 rank。
语法:rank(<edge>)
- 返回类型:int。
示例:
nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->() \
RETURN rank(e);
+---------+
| rank(e) |
+---------+
| 0 |
| 0 |
| 0 |
+---------+