所有数据类型
分类 |
支持的类型 | 支持属性定义 |
---|---|---|
数字 | int32、int64、uint32、uint64、float、double、decimal | 是 |
文本 | string、text | 是 |
时间 | datetime、timestamp | 是 |
空间 | point | 是 |
二进制 | blob | 是 |
真假 | bool | 否 |
空 | null | 否 |
图数据 | NODE、EDGE、PATH | 否 |
列表 | list(以上所有类型的列表形式) | 是,仅当元素为数字、文本、时间且不为 decimal 时 |
集合 | set(以上除列表之外所有类型的集合形式) | 是,仅当元素为数字、文本、时间且不为 decimal 时 |
对象 | object | 否 |
表格 | TABLE | 否 |
属性支持的数据类型
属性类型 | 描述 |
---|---|
int32 | 占 4 字节,有符号 |
uint32 | 占 4 字节,无符号 |
int64 | 占 8 字节,有符号 |
uint64 | 占 8 字节,无符号 |
float | 占 4 字节,6 位有效数字 |
double | 占 8 字节,15 位有效数字 |
decimal | 需指定精度[1](1~65)、标度[2](0~30) |
string | 创建属性时的默认类型,最大支持 60000 字节 |
text | 最大长度不限 |
datetime | 有效格式为 yyyy-mm-dd hh:mm:ss 、yyyy-mm-dd hh:mm:ss.ssssss ,有效存储范围为 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.499999',以 uint64 存储 |
timestamp | 有效格式为 yyyy-mm-dd hh:mm:ss 、yyyy-mm-dd 、yyyymmddhhmmss 、yyyymmdd ,并被换算为从格林威治时间 1970年1月1日0时 开始到该时间值的秒数,以 uint32 存储;其时区须通过 SDK 的 RequestConfig 进行设置 |
point | 地理坐标、2D坐标,其中坐标值精度为 double |
blob | 二进制的文件、图片、音频、视频等,实际长度受到服务器 max_rpc_msgsize (默认4M)的影响 |
list | int32[]、int64[]、uint32[]、uint64[]、float[]、double[]、string[]、text[]、datetime[]、timestamp[] |
set | set(int32)、set(int64)、set(uint32)、set(uint64)、set(float)、set(double)、set(string)、set(text)、set(datetime)、set(timestamp) |
[1]精度指数值的整数与小数的全部位数,不包括小数点
[2]标度指数值的小数位数
UQL 返回的数据类型
类型 |
数据结构 |
---|---|
NODE | {id: , uuid: , schema: , values: {...}} |
EDGE | {uuid: , schema: , from: , from_uuid: , to: , to_uuid: , values: {...}} |
PATH | {length: , nodes: [...], edges: [...]} |
TABLE | {name: , headers: [...], rows: [...]} |
ATTR | 除以上四种类型之外的其他类型 |
举例:
图中 Alice 的 NODE 结构为:
{
"id": "STU001",
"uuid": 1,
"schema": "student",
"values": {
"name": "Alice",
"age": 25
}
}
图中边的 EDGE 结构为:
{
"uuid": 53,
"schema": "studyAt",
"from": "STU001",
"to": "UNV001",
"from_uuid": 1,
"to_uuid": 1001,
"values": {
"start": 2001,
"end": 2005
}
}
表达 “Alice 就读于 Oxford” 的 PATH 结构为:
{
"length": 1,
"nodes": [{
"id": "STU001",
"uuid": 1,
"schema": "student",
"values": {
"name": "Alice",
"age": 25
}
}, {
"id": "UNV001",
"uuid": 1001,
"schema": "university",
"values": {
"name": "Oxford"
}
}],
"edges": [{
"uuid": 53,
"schema": "studyAt",
"from": "STU001",
"to": "UNV001",
"from_uuid": 1,
"to_uuid": 1001,
"values": {
"start": 2001,
"end": 2005
}
}]
}
对于别名为 group_stats 的表结构:
| group_name | count |
|------------|-------|
| green | 5 |
| red | 1 |
| yellow | 2 |
其 TABLE 结构为:
{
"name": "group_stats",
"headers": ["group_name", "count"],
"rows": [
["green", 5],
["red", 1],
["yellow", 2]
]
}
关于如何通过 RETURN 指定有效的返回格式,请参见本RETURN末尾的表格。
关于 NULL
null
所表示的空值产生于:
- 插入数据(
insert()
、insert().overwrite()
)时,未提供的属性值默认为null
- 创建属性时,该 schema 中原有数据的该属性值默认为
null
- 在 RETURN 中返回一个不存在的属性时,默认返回
null
- 查询(
find()
、khop()
、模板)无结果且使用了前缀 OPTIONAL 时,返回值中的点、边为null
当条件判断有 null
参与时,如果:
- 能够得到确定的结果,则返回该结果
- 不能得到确定的结果,则返回
null
表达式 | 结果 |
解释 |
---|---|---|
null == 3 |
null |
无法确定 null 和 3 是否相等,故返回 null。对于 != , < , > , >= , <= 同样返回 null |
null == null |
null |
无法确定。 对于 != , < , > , >= , <= 同样返回 null |
[1, null , 2] == [1, 3, 2] |
null |
无法确定。 对于 != 同样返回 null |
[1, null , 2] == [1, null , 2] |
null |
无法确定。 对于 != 同样返回 null |
[1, null , 2] == [1, null , 3] |
false | 可以确定 2 和 3 不同。对于 != 返回 true |
[1, null , 2] == [1, null , 2, 3] |
false | 可以确定两个列表的长度不同。对于 != 返回 true |
null <> [1, 3] |
null |
无法确定。 对于 <=> 同样返回 null |
1 IN [1, null , 2] |
true | 可以确定 1 存在于列表中。对于 NOT IN 返回 false |
3 IN [1, null , 2] |
null |
无法确定。 对于 NOT IN 同样返回 null |
null IN [ ] |
false | 可以确定列表是空的。对于 NOT IN 返回 true |
任何有 null
参与的数值运算(+
, -
, *
, /
, %
)均返回 null
。
任何有 null
参与的聚合函数运算(count()
, sum()
, max()
, min()
, avg()
, stddev()
, collect()
)均忽略 null
所在行再进行聚合运算。
与判断 null
值相关的函数、操作符请阅读coalesce(),ifnull(),空,非空。