GQL使用多种值和类型来表示图数据库中的信息。理解这些值和类型对实现有效查询和数据操作至关重要。
图元素类型
图元素类型包括点类型和边类型,分别对应点数据类型和边数据类型。
类型 | 描述 |
---|---|
NODE |
表示点类型,包括一个标签和与标签相关的属性类型集合 例如: NODE User (:User {name string, gender string}) 指定User 为点类型,其标签为:User ,拥有两个属性name 和gender |
EDGE |
表示边类型,包括一个标签和与标签相关的属性类型集合 例如: EDGE WorkIn ()-[:WorkIn {startOn datetime}]->() 指定WorkIn 为边类型,其标签为:WorkIn ,拥有一个属性startOn |
属性类型
属性类型由属性名称和属性值类型组成。嬴图支持以下属性值类型:
分类 | 支持的类型 | 描述 |
---|---|---|
数值 | int32 |
有符号32位整数(-2,147,483,648到2,147,483,647) |
uint32 |
无符号32位整数(0到4,294,967,295) | |
int64 |
有符号64位整数(-9,223,372,036,854,775,808到9,223,372,036,854,775,807) | |
uint64 |
无符号64位整数(0到18,446,744,073,709,551,615) | |
float |
32位单精度浮点数,6至7位有效数字(整数和小数部分,不包括小数点) | |
double |
64位双精度浮点数,15至16位有效数字(整数和小数部分,不包括小数点) | |
文本 | string |
不超过60000字节的字符序列,是创建属性时的默认值类型 |
text |
长度不限的字符序列 | |
时间 | datetime |
D时间日期值,范围从1000-01-01 00:00:00.000000到9999-12-31 23:59:59.499999,以uint64 类型存储 |
timestamp |
A相对于格林威治时间1970年1月1日0时0分0秒后的一个具体时间点,以秒为单位,以uint32 类型存储注意: 如果输入了日期和时间格式的值,系统会根据本地时区或SDK的 RequestConfig 设置的时区,将该值转换成时间戳。 同理,如果时间戳以日期和时间格式展示,系统会根据本地时区或SDK的RequestConfig 设置的时区转换该值 |
|
空间 | point |
代表具体地理位置的二维坐标;两个坐标值以double 类型存储 |
列表 | list |
同类型元素的有序集合,支持以下类型:int32[] ,uint32[] ,int64[] ,uint64[] ,float[] ,double[] ,string[] ,text[] ,datetime[] 和timestamp[] |
构造值类型
构造值类型包含复合元素。GQL定义了以下构造值类型:
类型 | 描述 |
---|---|
PATH |
表示路径值类型,其中封装了构成路径元素列表[1]的点和边。当路径值的路径元素列表仅包含一个点时,我们称其为单点路径值 |
LIST |
表示列表值类型。列表值是同类元素或异类元素的有序集合 列表值可以是组列表值,也可以是常规列表值。组列表值来自带量词的路径模式。常规列表值则是除组列表值之外的列表值 |
RECORD |
表示记录类型。一条记录是一组字段,每个字段都有名称和对应值。包含零个字段的记录称为单位记录 |
[1] 如果路径元素列表中的点边有序序列构成一条路径,则称该序列识别一条路径
结果类型
结果类型指的是查询返回值的数据类型。嬴图定义以下结果类型。
RESULT_TYPE_NODE
本条查询返回所有标签为Paper
并与变量n
绑定的点:
MATCH (n:Paper) RETURN n
n
的数据结构:
{
"data": [
{
"id": "P2",
"uuid": "8718971077612535835",
"schema": "Paper",
"values": {
"title": "Optimizing Queries",
"score": 9
}
},
{
"id": "P1",
"uuid": "8791028671650463770",
"schema": "Paper",
"values": {
"title": "Efficient Graph Search",
"score": 6
}
}
],
"alias": "n",
"type": 2,
"type_desc": "RESULT_TYPE_NODE"
}
RESULT_TYPE_EDGE
本条查询返回所有标签为Cites
且与变量e
绑定的出边:
MATCH ()-[e:Cites]->() RETURN e
e
的数据结构:
{
"data": [
{
"from": "P1",
"to": "P2",
"uuid": "1",
"from_uuid": "8791028671650463770",
"to_uuid": "8718971077612535835",
"schema": "Cites",
"values": {
"weight": 2
}
}
],
"alias": "e",
"type": 3,
"type_desc": "RESULT_TYPE_EDGE"
}
RESULT_TYPE_PATH
本条查询返回与变量p
绑定的一步出向路径:
MATCH p = ()-[]->() RETURN p
p
的数据结构:
{
"data": [
{
"nodes": [
{
"id": "P1",
"uuid": "8791028671650463770",
"schema": "Paper",
"values": {
"title": "Efficient Graph Search",
"score": 6
}
},
{
"id": "P2",
"uuid": "8718971077612535835",
"schema": "Paper",
"values": {
"title": "Optimizing Queries",
"score": 9
}
}
],
"edges": [
{
"from": "P1",
"to": "P2",
"uuid": "1",
"from_uuid": "8791028671650463770",
"to_uuid": "8718971077612535835",
"schema": "Cites",
"values": {
"weight": 2
}
}
],
"length": 1
}
],
"alias": "p",
"type": 1,
"type_desc": "RESULT_TYPE_PATH"
}
RESULT_TYPE_ATTR
本条查询返回标签为Paper
的点的title
属性值:
MATCH (n:Paper) RETURN n.title
n.title
的数据结构:
{
"data": {
"alias": "n.title",
"type": 4,
"type_desc": "RESULT_TYPE_ATTR",
"values": [
"Optimizing Queries",
"Efficient Graph Search"
]
},
"alias": "n.title",
"type": 4,
"type_desc": "RESULT_TYPE_ATTR"
}
RESULT_TYPE_TABLE
本条查询返回与变量table
绑定的一个表:
MATCH (n:Paper) RETURN table(n.title, n.score) AS table
table
的数据结构:
{
"data": {
"name": "table",
"alias": "table",
"headers": [
"n.title",
"n.score"
],
"rows": [
[
"Optimizing Queries",
"9"
],
[
"Efficient Graph Search",
"6"
]
]
},
"alias": "table",
"type": 5,
"type_desc": "RESULT_TYPE_TABLE"
}
Null值
null
值是一种特殊值,在所有可空类型中使用。任何非空值都是物质值。
Null情景
null
值可在多种情况下出现,如:
- 默认分配值: 在插入点或边时,若未指定属性值给可空属性,则自动接收
null
值。 - 显式指定Null值: 在插入点或边时,可空属性可被专门指定为
null
。 - 删除属性值: 删除属性原有值并用
null
替代。 - 分配新属性: 为标签添加新属性时,默认情况下,该标签下已有的点或边,对应的新属性将被赋予
null
值。 - 不存在的属性引用: 引用不存在的属性会返回
null
值。 - 可选匹配: 在
MATCH
语句中使用关键字OPTIONAL
时,若没有找到匹配模式的结果,MATCH
会生成null
值而非空返回。 - NULLIF表达式: 如果两个比较值相等,
NULLIF
表达式返回null
值。
Null比较
null
值本质上未知,因此无法和其他值进行比较。涉及null
的比较若使用了=
或<>
等普通运算符,通常不会生成真或假的结果,而是产生一个未知结果,也表示为null
。
示例 | 结果 |
---|---|
RETURN null = null |
null |
RETURN null > 3 |
null |
RETURN [1,null,2] <> [1,null,2] |
null |
RETURN 3 IN [1,null,2] |
null |
RETURN null IN [1,2] |
null |
RETURN null IN [] |
0 |
涉及null
的比较需要用到null谓词(IS NULL
和IS NOT NULL
)作特殊处理。
示例 | 结果 |
---|---|
RETURN null IS NULL |
1 |
RETURN null IS NOT NULL |
0 |
Null处理
在某些情况下,null
值会得到特殊处理,例如:
- 聚合函数通常忽略
null
值。 GROUP BY
从句将所有null
值归为一组。ORDER BY
语句允许使用关键字NULLS FIRST
和NULL LAST
对null排序。