关于 YMatrix
部署数据库
使用数据库
管理集群
最佳实践
高级功能
高级查询
联邦查询
Grafana 监控
备份恢复
灾难恢复
图数据库
管理手册
性能调优
故障诊断
工具指南
系统配置参数
SQL 参考
id() 返回顶点或边的 id。
语法:id(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回顶点或边的表达式。 |
查询:
SELECT *
FROM cypher('graph_name', $$
MATCH (a)
RETURN id(a)
$$) as (id agtype);
结果:
id
------
0
1
2
3
(4 rows)
start_id() 返回边的起始顶点的 id。
语法:start_id(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 求值为边的表达式。 |
查询:
SELECT *
FROM cypher('graph_name', $$
MATCH ()-[e]->()
RETURN start_id(e)
$$) as (start_id agtype);
结果:
start_id
--------
0
1
2
3
(4 rows)
end_id() 返回边的终止顶点的 id。
语法:end_id(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 求值为边的表达式。 |
查询:
SELECT *
FROM cypher('graph_name', $$
MATCH ()-[e]->()
RETURN end_id(e)
$$) as (end_id agtype);
结果:
end_id
------
4
5
6
7
(4 rows)
type() 返回边类型的字符串表示。
语法:type(edge)
返回值:
agtype 字符串。
参数:
| 名称 | 描述 |
|---|---|
| edge | 求值为边的表达式。 |
查询:
SELECT *
FROM cypher('graph_name', $$
MATCH ()-[e]->()
RETURN type(e)
$$) as (type agtype);
结果:
type
-------
"KNOWS"
"KNOWS"
(2 rows)
返回包含顶点或边所有属性的 agtype 映射。如果参数已经是映射,则原样返回。
语法:properties(expression)
返回值:
agtype 映射。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回顶点、边或 agtype 映射的表达式。 |
注意事项:
properties(null) 返回 null。查询:
SELECT *
FROM cypher('graph_name', $$
CREATE (p:Person {name: 'Stefan', city: 'Berlin'})
RETURN properties(p)
$$) as (type agtype);
结果:
properties
--------------------------------
{name: "Stefan"; city: "Berlin"}
(1 rows)
返回 agtype 列表中的第一个元素。
语法:head(list)
返回值:
返回值的类型与列表第一个元素的类型相同。
参数:
| 名称 | 描述 |
|---|---|
| list | 返回列表的表达式 |
注意事项:
head(null) 返回 null。null,head(list) 将返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, head(a.array)
$$) as (lst agtype, lst_head agtype);
返回列表中的第一个元素。
结果:
lst | lst_head
----------------------+--------
["one","two","three"] | "one"
(1 rows)
返回 agtype 列表中的最后一个元素。
语法:last(list)
返回值:
返回值的类型与列表最后一个元素的类型相同。
参数:
| 名称 | 描述 |
|---|---|
| list | 返回列表的表达式 |
注意事项:
tail(null) 返回 null。 null,last(list) 将返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, last(a.array)
$$) as (lst agtype, lst_tail agtype);
返回列表中的最后一个元素。
结果:
lst | lst_tail
--------------------- + --------
["one","two","three"] | "three"
(1 rows)
length() 返回路径的长度。
语法:length(path)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| path | 返回路径的表达式。 |
注意事项:length(null) 返回 null。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH p = (a)-[]->(b)-[]->(c)
WHERE a.name = 'Alice'
RETURN length(p)
$$) as (length_of_path agtype);
返回路径 p 的长度。
结果:
length_of_path
----------------
2
2
2
(3 rows)
size() 返回列表的长度。
语法:size(list)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| list | 返回列表的表达式。 |
注意事项:
size(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
RETURN size(['Alice', 'Bob'])
$$) as (size_of_list agtype);
返回列表的长度。
结果:
size_of_list
--------------
2
(1 row)
startNode() 返回边的起始节点。
注意! 在 YMatrix AGE 中,
startNode()和endNode()在分布式环境下可能报错:ERROR: graphid cde <id> does not exist这是因为边和节点可能分布在不同的 segment 上,
startNode()/endNode()需要根据 graphid 查找节点,但该节点可能不在当前 segment 上。替代方案:使用
start_id()/end_id()获取 graphid,然后通过MATCH查找对应节点。
语法:startNode(edge)
返回值:
一个顶点。
参数:
| 名称 | 描述 |
|---|---|
| edge | 返回边的表达式。 |
注意事项:
startNode(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (x:Developer)-[r]-()
RETURN startNode(r)
$$) as (v agtype);
结果:
v
-----------------------------------------
Node[0]{name:"Alice",age:38,eyes:"brown"}
Node[0]{name:"Alice",age:38,eyes:"brown"}
(2 row)
endNode() 返回边的终止节点。
语法:endNode(edge)
返回值:
一个顶点。
参数:
| 名称 | 描述 |
|---|---|
| edge | 返回边的表达式。 |
注意事项:
endNode(null) 返回 null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (x:Developer)-[r]-()
RETURN endNode(r)
$$) as (v agtype);
结果:
v
-------------------------------------------
Node[2]{name:"Charlie",age:53,eyes:"green"}
Node[1]{name:"Bob",age:25,eyes:"blue"}
(2 row)
timestamp() 返回当前时间与 1970 年 1 月 1 日 UTC 午夜之间的差值(以毫秒为单位)。
语法:timestamp()
返回值:
agtype 整数。
注意事项:
timestamp() 在整个查询期间返回相同的值,即使是长时间运行的查询也是如此。查询
SELECT *
FROM cypher('graph_name', $$
RETURN timestamp()
$$) as (t agtype);
返回以毫秒为单位的时间。
结果:
t
---------------
1773998074375
(1 row)
toBoolean() 将字符串值转换为布尔值。
语法:toBoolean(expression)
返回值:
agtype 布尔值。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回布尔或字符串值的表达式。 |
注意事项:
toBoolean(null) 返回 null。null。查询
SELECT *
FROM cypher('graph_name', $$
RETURN toBoolean('TRUE'), toBoolean('not a boolean')
$$) as (a_bool agtype, not_a_bool agtype);
结果:
a_bool | not_a_bool
--------+------------
true |
(1 row)
toFloat() 将整数或字符串值转换为浮点数。
语法:toFloat(expression)
返回值:
浮点数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回 agtype 数值或 agtype 字符串值的表达式。 |
注意事项:
toFloat(null) 返回 null。 null。查询
SELECT *
FROM cypher('graph_name', $$
RETURN toFloat('11.5'), toFloat('not a number')
$$) as (a_float agtype, not_a_float agtype);
结果:
a_float | not_a_float
---------+-------------
11.5 |
(1 row)
toInteger() 将浮点数或字符串值转换为整数值。
语法:toInteger(expression)
返回值:
agtype 整数。
参数:
| 名称 | 描述 |
|---|---|
| expression | 返回 agtype 数值或 agtype 字符串值的表达式。 |
注意事项:
toInteger(null) 返回 null。null。查询
SELECT *
FROM cypher('graph_name', $$
RETURN toInteger('42'), toInteger('not a number')
$$) as (an_integer agtype, not_an_integer agtype);
结果:
an_integer | not_an_integer
------------+----------------
42 |
(1 row)
coalesce() 返回给定表达式列表中的第一个非 null 值。
语法:coalesce(expression [, expression]*)
返回值:
返回值的类型与第一个非 null 表达式的类型相同。
参数:
| 名称 | 描述 |
|---|---|
| expression | 可能返回 null 的表达式。 |
注意事项:
null。查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a)
WHERE a.name = 'Alice'
RETURN coalesce(a.hairColor, a.eyes), a.hair_color, a.eyes
$$) as (color agtype, hair_color agtype, eyes agtype);
结果:
color | hair_color | eyes
---------+------------+---------
"brown" | | "brown"
(1 row)