什么是 UQL
UQL 全称 Ultipa Graph Query Language,是 Ultipa 图数据库专用的高性能查询与管理语言,其极低的学习成本能让使用者快速上手操作 Ultipa 图系统。
UQL 支持对图数据的添加、删除、修改、查询(元数据查找、路径查找、子图匹配)、图集管理、schema 管理、属性管理、索引管理、各类任务管理、权限管理等功能。
可通过 Ultipa CLI(命令行工具)、Ultipa Manager(高可视化数据库查询与管理工具)及 Ultipa Drivers(SDK、APIs等规范)对 UQL 进行调用。
UQL 的设计优势
基于对图的深度理解并结合工业界对图的高维性、扩展性等需求,UQL 采用了与人脑思维模式一致的语义组装逻辑,在设计上具有以下优势:
- 对点、边、路径、表格等高级数据结构的清晰定义
- 对上述数据结构的轻松查询、计算、组装与返回
- 对图查询所需的复杂过滤条件的简洁描述
- 易读,易写,易学的语法结构
UQL 的设计优势天然解决了 SQL-like 语言的无法表达高维数据、关联数据查询复杂低效、代码难理解、维护难度高等问题。
为适应广大开发者的编程习惯,UQL 具备 DQL、DDL、DML、DCL 的语法特性:
- DQL(Data Query Language):数据查询语法,如点、边、路径的查询;
- DDL(Data Definition Language):数据定义语法,如增删图集、修改 schema、定义属性、创建索引等;
- DML(Data Manipulation Language):数据操纵语法,如对图集的元数据等内容进行增、删、改;
- DCL(Data Control Language):数据访问控制语法,主要用于设置数据库的权限,如用户管理、角色管理、赋权与撤销等。
作为图查询语言,UQL 在整体功能与兼容性上将和 GQL 国际标准保持同步。该标准的制定工作由 LDBC(Linked Data Benchmark Council,国际关联数据基准委员会)主导,预计将在 2024 年推出。
Ultipa 团队作为 LDBC 成员全程参与图查询语言 GQL 标准的制定。
UQL 的构成
UQL 的编写通常包含链式表达、语义组装、别名调用三个方面。其所采用的函数式风格能满足复杂的数据处理需求,提供无限的语义扩展空间。
以下为一个典型的 UQL 示例:
n({_id == "CA001"}).e({time > prev_e.time})[3].n(as target)
group by target.level with count(target) as quantity
order by quantity desc
return target.level, quantity limit 10
说明:
- 链式语句:即示例中的 n(...).e(...)[3].n(...),风格为
[命令].[参数].[参数]…
,用来增、删、改、查, 一个 UQL 语句可以包含多个链式语句; - 子句:即示例中的 group by ...,with ...,order by ...,return ...,limit ...,用来加工和组装前面得到的结果;
- 自定义别名:即示例中的 target、quantity,用来在语句间进行数据调用,需使用关键词 as 先定义再调用;
- 系统别名:即示例中的 prev_e,用来在模板内部进行数据调用,无需定义直接使用;
- 函数:即示例中的 count(...),用来对得到的结果进行运算,需要写在子句中;
- UQL 语句中支持转义符
\
、制表符\t
、回车换行符\r\n
以及注释符//
、/*
、*/
。
版本更新(V4.3)
服务器:
- 重构了 EXTA
- 新增了服务器启动参数
-restore
用于支持从备份文件路径恢复数据 - Server.config 的参数
private_addr
和public_addr
支持域名 - 新增 proto 接口
ListData
,is_null tag
,Backup
, Property 新增sub_types
UQL 新特性:
- 新增了属性类型 point、list (string[], text[], int32[], uint32[], int64[], uint64[], float[], double[], timestamp[], datetime[])
- 支持属性值 null 及其相关运算
- 聚合运算函数忽略 null 值
- 新增函数 IS NULL, IS NOT NULL, point(), distance(), listContains()
- 新增去重操作符 DISTINCT
- 命令 find()、khop() 支持前缀关键词 OPTIONAL
UQL 修改:
- 函数名称变化:
- distinct() -> dedup()
- 函数 collect() 收集点、边、路径的全部信息
- 别名数据结构去掉 ARRAY,将 list 类型合并至 ATTR
- 插入数据时未提供的属性、插入数据后创建的属性值为 null
- 重构了前缀关键词 EXPLAIN、PROFILE
Ultipa 图操作语言 Ultipa 团队发明并设计。
文件许可:Creative Commons 4.0