GQL支持多种值和类型来表示图数据库中的数据。理解这些值和类型对实现有效查询和数据操作至关重要。
图元素类型
图元素类型包括点类型和边类型,分别对应点数据类型和边数据类型。
类型 | 描述 |
---|---|
NODE |
点类型,包括一个标签和与标签相关的属性类型集合 例如: NODE User (:User {name string, gender string}) 指定User 为点类型,其标签为:User ,拥有两个属性name 和gender |
EDGE |
边类型,包括一个标签和与标签相关的属性类型集合 例如: EDGE WorkIn ()-[:WorkIn {startOn datetime}]->() 指定WorkIn 为边类型,其标签为:WorkIn ,拥有一个属性startOn |
属性值类型
属性值类型指属性值的数据类型。嬴图支持以下属性值类型:
数值
类型 |
描述 |
---|---|
UINT32 |
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位 |
DOUBLE |
64位双精度浮点数,支持最多15位有效数字(包括所有的非零数字和夹在非零数之间的零,例如0.0123456789012345 ) |
DECIMAL |
指定精度(1到65,指所有数字位数)和标度(0到30,指小数点后的数字位数)的数字;例如,DECIMAL(10,4) 代表精度最大为10、标度最大为4的数字 |
文本
类型 |
描述 |
---|---|
STRING |
用引号包裹的一串字符,不超过60000 字节;创建属性时的默认类型 |
TEXT |
用引号包裹的一串字符,长度不限 |
时间点
类型 |
描述 |
---|---|
DATE |
不带时区的日期值,例如2025-01-01 、20250101 |
LOCAL DATETIME |
不带时区的日期和时间值;例如2025-01-01 12:20:02 、20250101T122002.55254 |
LOCAL TIME |
不带时区的时间值,例如12:20:02 、122002.55254 |
ZONED DATETIME |
带时区的日期和时间值,例如2025-01-01 12:20:02-1030 、20250101T122002.55254+0900 |
ZONED TIME |
带时区的时间值,例如12:20:02-1030 、122002.55254+0900 |
DATETIME |
不带时区的日期和时间值 |
TIMESTAMP |
自1970-01-01 00:00:00 UTC 起计算的秒数时间戳,例如,1751422921 对应的时间是2025-07-02 02:22:01 UTC 如果提供日期和时间格式的值,系统会根据本地、客户端或SDK设置的时区自动将其转换成时间戳;同样,当以日期和时间格式展示时间戳时,也会根据设置的时区进行转换 |
日期
- 格式:
yyyy-mm-dd
或yyyymmdd
- 范围:
-9999-12-31
到9999-12-31
时间
- 格式:
hh:mm:ss[.fraction]
或hhmmss[.fraction]
- 范围:
00:00:00.000000000
到23:59:59.999999999
日期和时间
- 格式:使用空格或字母
T
连接日期和时间 - 范围:
-9999-01-01 00:00:00.000000000
到9999-12-31 23:59:59.999999999
时区
- 格式:以UTC偏移量表示,即
±hh:mm
或±hhmm
,直接写在时间后面 - 范围:
UTC-15:00
到UTC+15:00
除时间戳外,时间点类型的赋值均需以引号包裹。
时间段
类型 |
描述 |
---|---|
DURATION(YEAR TO MONTH) |
以年和月为单位衡量的时间段,例如P2Y5M (2年5个月)、-P1Y2M (负的1年2个月)格式: [-]P[nY][nM] 范围: -P178956969Y12M 到P178956969Y12M |
DURATION(DAY TO SECOND) |
以日、小时、分钟、秒和可选的小数秒为单位衡量的时间段,例如P3DT4H (3天4小时)、-P1DT2H3M4.12S (负的1天2小时3分钟4.12秒)格式: P[nD][T[nH][nM][nS]] (连接日和时间的字母T 必需)范围: -P106750DT23H59M59.999999999S 到P106750DT23H59M59.999999999S |
布尔
类型 |
描述 |
---|---|
BOOL |
包括两个可能的值:
|
空间
类型 |
描述 |
---|---|
POINT |
代表具体地理位置的二维坐标,坐标值以DOUBLE 类型存储 |
列表
类型 |
描述 |
---|---|
LIST<subType> |
子类型元素的有序集合;子类型支持除BOOL 外的以上所有类型 |
构造值类型
构造值类型是包含复合元素的数据类型。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排序。