结构化的 UQL 语句输送给 Ultipa Server 后会进行自动解析、优化,再分配给高性能图计算引擎进行图查询,查询后的结果在执行完其余的处理、组装后最终返回给用户。
本节会从整体介绍 UQL 的查询、别名、返回机制,目的在于给使用者一个大体的认识。如果在阅读过程中存在疑惑,请继续向下阅读,在后面的章节中,会对每一部分做详细介绍。
UQL 基本结构
观察下面这个 UQL 示例:
find().nodes() as target
return target.name, target.age limit 10
其中:
- find().nodes() 发起点查询的操作
- as target 定义别名,将点查询的结果用别名 target 来表达
- return target.name, target.age 组装两个返回值,一并返回给用户
- limit 10 设置返回的数据量的上限,最多返回 10 条数据
绿色部分 find().nodes() 是形式为[命令]
.[参数]
.[参数]
... 的 链式查询,一个复杂的 UQL 语句中可以包含多个链式查询语句。本章后面将依次介绍各种查询命令及其参数的概念和用法。
黄色部分 return、limit 是子句关键词,子句可以对前面语句传来的结果进行各种运算及处理,关于子句关键词的详细介绍请阅读《数据流|子句》。
红色部分 as 是别名关键词,用来给当前的结果定义别名,使这些结果能在后续的语句中被使用;别名是 UQL 语句各部分协同工作的纽带。
前缀词
前缀词可以写在某个链式查询语句之前、或整个 UQL 语句之前,用于增强查询功能、或实现查询之外的功能。UQL 目前支持以下前缀词:
前缀词 |
解释 | 作用域 |
---|---|---|
OPTIONAL | 检查当前链式查询语句的每一次执行结果,对任何无结果的情况返回一个伪点、伪边或伪路径(见各查询命令章节的示例) | 当前链式查询 |
EXPLAIN | 不执行 UQL 语句,仅返回语句间(链式查询、子句)的执行逻辑 | 整个 UQL 语句 |
PROFILE | 执行 UQL,且返回语句间(链式查询、子句)的执行逻辑与每个语句的耗时(time_cost) | 整个 UQL 语句 |
DEBUG | 执行 UQL,且返回每个执行步骤的调用次数(call_time)与耗时(time_cost) | 整个 UQL 语句 |
EXEC TASK | 执行 UQL,且将语句发送至分析节点(见《任务》-《分析节点》) | 整个 UQL 语句 |
前缀词均为大小写不敏感。
- EXPLAIN 示例:
explain n({@movie} as movies).e({@filmedIn}).n({@country.name == "US"}) as paths
group by movies.genre
return movies.genre, count(movies)
- PROFILE 示例:
profile n({@movie} as movies).e({@filmedIn}).n({@country.name == "US"}) as paths
group by movies.genre
return movies.genre, count(movies)
- DEBUG 示例:
debug n({@movie} as movies).e({@filmedIn}).n({@country.name == "US"}) as paths
group by movies.genre
return movies.genre, count(movies)