GQL支持多种值和类型来表示图数据库中的数据。理解这些值和类型对实现有效查询和数据操作至关重要。
属性值类型
属性值类型指属性值的数据类型。嬴图支持以下属性值类型:
数值
类型  | 
描述 | 
|---|---|
INT/INTEGER/INT32/INTEGER32 | 
32位有符号整数,范围从-2,147,483,648到 2,147,483,647 | 
UINT/UINT32 | 
32位无符号整数,范围从0到4,294,967,295 | 
INT64/INTEGER64 | 
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 | 
TIMESTAMP | 
自1970-01-01 00:00:00 UTC起计算的秒数时间戳,例如,1751422921对应的时间是2025-07-02 02:22:01 UTC如果提供日期和时间格式的值,系统会根据本地、客户端或SDK设置的时区自动将其转换成时间戳;同样,当以日期和时间格式展示时间戳时,也会根据设置的时区进行转换  | 
DATETIME | 
不带时区的日期和时间值,范围是1000-01-01 00:00:00.000000到9999-12-31 23:59:59.499999;这是嬴图扩展提供的属性类型,与GQL标准中的LOCAL DATETIME类似,但支持更灵活的赋值格式,例如:
  | 
日期
- 格式:
yyyy-[m]m-[d]d或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个月)
  | 
DURATION(DAY TO SECOND) | 
以日、小时、分钟、秒和可选的小数秒为单位衡量的时间段,例如P3DT4H(3天4小时)、-P1DT2H3M4.12S(负的1天2小时3分钟4.12秒)
  | 
布尔
类型  | 
描述 | 
|---|---|
BOOL | 
包括两个可能的值:
  | 
空间
类型  | 
描述 | 
|---|---|
POINT | 
地理坐标系中的一个二维坐标(latitude, longitude),坐标值以DOUBLE类型存储 | 
POINT3D | 
笛卡尔坐标系中的一个三维坐标(x, y, z),坐标值以DOUBLE类型存储 | 
记录
类型  | 
描述 | 
|---|---|
RECORD | 
一组字段,每个字段有名称和对应的值 | 
二进制
类型  | 
描述 | 
|---|---|
BLOB | 
存储二进制数据,可用于存储图像、音频、视频或其他非结构化文件 | 
列表
类型  | 
描述 | 
|---|---|
LIST<subType> | 
同一类型元素的有序集合;子类型支持除BOOL外的以上所有类型 | 
构造值类型
构造值类型是包含复合元素的数据类型。GQL定义以下构造值类型:
| 类型 | 描述  | 
|---|---|
PATH | 
表示路径值类型,是构成图中一条路径的有序点、边列表 | 
LIST或ARRAY | 
表示列表值类型,列表是同类型或不同类型元素的有序集合 列表包括常规列表和组列表,不是组列表的就是常规列表  | 
RECORD | 
表示记录类型,一条记录是一组字段,每个字段都有名称和对应的值 | 
结果类型
结果类型指的是查询返回值的数据类型。嬴图定义以下结果类型。

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排序。