Schema 函数¶
本文介绍 NebulaGraph 支持的 Schema 函数。Schema 函数分为两类,一类适用于原生 nGQL 语句,另一类适用于 openCypher 兼容语句。
原生 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(edge)¶
properties(edge) 返回边的所有属性。
语法:properties(edge)
- 返回类型:map。
示例:
nebula> GO FROM "player100" OVER follow \
YIELD properties(edge);
+------------------+
| properties(EDGE) |
+------------------+
| {degree: 95} |
| {degree: 95} |
+------------------+
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" |
+-------------+-------------+
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" |
+-------------+-------------+
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" |
+----------+
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 |
+---------+