写点什么

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

  • 2024-04-26
    陕西
  • 本文字数:4667 字

    阅读完需:约 15 分钟

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

数据库语言 GQL 是什么

新的属性图数据库语言标准,ISO/IEC 39075 信息技术 — 数据库语言 — GQL,近日已经发布。但 GQL 是什么,这个数据库语言标准中包含了什么内容?

GQL 这一新数据库语言标准由国际标准委员会 ISO/IEC JTC1 SC32 WG3 数据库语言团队开发。忽略上面的 ISO/IEC JTC1 标准层次结构的缩写,SC32 WG3 是一个国际委员会,同时负责开发和强化 SQL 数据库语言。SC32 WG3 的参与者(个别专家)由世界各国的标准流程指派。


当标准委员会开始讨论一个新的属性图数据库语言标准时,SC32 WG3 选择了 “GQL” 这个名字。可能大家觉得 GQL 是 Graph Query Language(图查询语言)的缩写,但是这个名字主要是为了体现 GQL 与 SQL 数据库语言是并列的。


SQL 国际标准的首个版本(ISO/IEC 9075 - 数据库语言 — SQL)发布于 1987 年。从那时起,SQL 标准经过了多次修订,并融入了多种新技术。2019 年,一个新项目获批,主要是制定专注属性图数据库的平行标准,即数据库语言 GQL。这对标准机构和行业的重要程度不言而喻,因为这是 ISO 在近 35 年内首次发布的、新的数据库查询语言。


近几年,属性图数据库在大数据、NoSQL 技术领域变得越发重要。属性图数据的一大特点是,在数据中会创建关系,用户可直接编写声明式查询而无需指定关系。与将数据结构化为表的关系型模型不同,属性图模型在数据库内将数据结构化为图。这让基于模式的分析成为可能,并且可用极小的成本添加新类型数据。现实生活中,关于图的应用从数字孪生(Digital Twin)到反洗钱(Anti-Money Laundering),再到药物发现(Drug Discovery)、供应链分析(Supply Chain),以及为生成式人工智能(GenAI)提供的知识图谱支持,等等。这种新模型与语言的结合前景,以及在数据库领域内的显著且持续增长的用量,很大程度上是 SQL 的新 ISO 兄弟语言 GQL 的基础。


属性图数据库存储和检索点(顶点)和边(关系)。而 GQL 标准规定的声明式语言受启发于现有属性图数据库产品和 SQL 标准。


GQL 标准是一个完整的数据库语言,支持创建、读取、更新和修改属性图数据。而这里的属性图数据可以是 Schema Free 的,也可以通过完整的属性图模式(Graph Type)进行约束。


GQL 标准约定了多种多样的数据类型,来支持字符和字节字符串、定点数、浮点数以及嵌套数据。GQL 查询中所用的图模式匹配(GPM,Graph Pattern Matching)语言非常强大,允许用户编写相对简单的查询来进行复杂的数据分析。


作为一种数据库语言,GQL 不只是一种图查询语言。与 SQL 一样,它设定了一个从持久化且可扩展的目录初始化的运行时环境。目录列出了存储的数据对象,这些对象通过经过身份验证的会话,并利用事务性工作单元来进行访问。它支持插入、更新、删除和读取属性图,这些属性图是由目录中的条目创建和引用的。这些图的内容可以是无约束的,也可以由管理员定义的数据模型(图类型)进行约定。这些图类型是 GQL 中“GQL-schema”的一部分,即目录中用于存放元数据和数据定义的专用容器。此外,通过定义数据的所有权归经过身份验证的用户所有,GQL-schema 也支持了一个基本的安全模型。


GQL 吸收了众多现有商业图查询语言的特性,包括由 Neo4j Inc. 开发的 openCypher、Tigergraph Inc. 的 GSQL、Oracle Inc. 的 PGQL,以及 LDBC 的研究语言 G-Core。此外,它还与 SQL/PGQ 共享一个从 Cypher 派生的图模式匹配子语言(非正式称为 GPML4),该语言是 SQL 的只读扩展,允许将通过专用视图访问的表格数据当作属性图处理。GPML 通过将模式图与数据图进行匹配,返回数据图的子图的表格表示形式。

属性图的应用场景


属性图被私人和公共金融机构广泛使用,用来识别潜在的犯罪行为,如:洗钱。这种使用场景既出于需要,有时也是法律要求。例如,一系列的资金转移——从 A 到 B,再从 B 到 C,最后从 C 回到 A——可能暗示洗钱活动的存在。同样地,在评估投资组合风险、借贷双方的偿债能力、反欺诈、提供客户 360 度全方位视图以及其他多种场景中,属性图也发挥着重要作用。


属性图同样用于模拟公共事业基础设施,如:水资源分配、电力分配和电信网络。在这些场景中,典型的查询包括:评估在配电网络特定节点增加新负载或分布式发电设施(例如:风能或太阳能)可能带来的影响和收益,以及进行网络设计、维护、故障诊断和安全管理。

属性图的其他应用场景还包括(但不限于)社交网络、物料清单、访问控制、产品推荐、引用网络、路由策略、影响力检测、蛋白质交互网络、影响评估,以及生成式 AI。

GQL 示例

以下示例主要介绍了如何使用 GQL 部分功能:

  • 查询和图模式匹配

  • 添加、修改以及删除数据

  • 事务处理

  • Schema Free 图和 Fixed Schema 图

  • 查询和图模式匹配

GQL 查询采用了一种功能丰富的图模式匹配(GPM)语言。以下示例演示了如何查找与名为“Avery”的点存在一跳关系的所有点:

MATCH (a {firstname: 'Avery'})-[b]->(c)RETURN a, b, c
复制代码

这里这里 MATCH 语句定义了变量 a、b 和 c,并能在查询的后续部分引用,本例中是在

RETURN语句中。而用户编写查询语句时,不用预先了解“Avery”与其他点之间的具体关系。

事实上,GQL 标准并未规定返回数据的显示方式。下面是一种可能的展示方式,以可视化图的形式:



图可视化工具能够展示出查询到的数据之间的关系,并在需要时展开显示更多细节。

而数据的另一种展示方式是文本。

MATCH (a {firstname: 'Avery'})-[b]->(c)RETURN a.firstname, b, c.name+------------------------------------------------------------+| a.firstname | b                              | c.name      |+------------------------------------------------------------+| "Avery"     | [:LivesIn {since: 1980-07-15}] | "Granville" || "Avery"     | [:HasPet]                      | "Unique"    |+------------------------------------------------------------+
复制代码

GQL GPM 支持更复杂的查询,例如:量化路径模式。例如:

/* 简单的查询 */MATCH ((a)-[r]->(b)){1,5}RETURN a, r, b
复制代码

此示例将查找一个点 a 认识(r)另外一个点 b 的路径,而这个路径长度最多为 5,即一个五跳查询。当然,GQL 支持你演变出更复杂的量化路径模式。

  • 增删改图数据

上面示例中的 GQL 数据是使用 INSERT 语句创建的。例如:

/* 插入 1 个点 */INSERT (:Pet {name: 'Unique', pettype: 'Dog'})
复制代码

在这个示例中,“Pet”是一个标签,而“name”和“pettype”是标签的属性。标签是可以存在或不存在的标识符。属性则是名称和值的组合。无论是点(顶点)还是边(关系),都可以拥有标签和属性。

在 GQL 表达中,点被圆括号()包围,边则被方括号[]包围。

同样的,GQL 的插入语句也能用上复杂的图模式。下面的语句将插入两个点,以及它们之间的一条边。

/* 插入 2 个点及 1 条边 */INSERT (:Person {firstname: 'Avery'                ,lastname: 'Stare'                ,joined: date("2022-08-23")})     -[:LivesIn {since: date("2022-07-15")}]->      (:City {name: 'Granville'             ,state: 'OH'             ,country: 'USA'})
复制代码

MATCH语句的结果后面也可以接着 INSERT 语法:

/* 新建一条连接 Avery 和宠物狗 Unique 的边 */MATCH (a {firstname: 'Avery'})     ,(d {name: 'Unique'})INSERT (a)-[:HasPet]->(d)
复制代码

在这个示例中,a 和 d 是别名。MATCH 语句定义了它们,并持续有效直到整条 GQL 语句的结束。MATCH 的结果是两个点表达式返回的点的笛卡尔积。由于每个点表达式仅返回一个点,因此 INSERT 操作将只插入一条边。

修改 GQL 数据的方法包括:识别要更新的点或边,再设置或删除它们的属性。例如:

MATCH (d:Pet) where d.name="Unique"SET d.weight_kg=26MATCH (e {lastname: 'Stare'})REMOVE e.joined
复制代码

GQL 数据的删除是通过识别点,断开(DETACH )其关系,再删除点来实现的。例如:

/* 删除 Avery 和相关的点 */MATCH (a {firstname: 'Avery'})-[b]->(c)DETACH DELETE a, c
复制代码
  • 事务

GQL 支持可序列化的事务,且支持额外的自定义事务模式。事务可以通过显式或隐式的 START TRANSACTION 语句启动,并通过 COMMIT 或 ROLLBACK 语句结束。GQL 还支持自动事务的启动和提交。


  • Schema Free 与 Fixed Schema 图

GQL 支持 Schema Free 图,这种图对输入数据没有任何限制;同时也支持 Fixed Schema 图,这种图可以通过定义图类型来创建,图类型明确定义了可以存在于该图中的点和关系的类型。

Schema Free 图接受插入任意数据。这方便快速启动数据系统,但数据的控制问题则留给了应用开发者,或者是用户。


GQL 标准还支持创建图类型。图类型是一种数据模板,通过明确规定在基于特定图类型创建的 Fixed Schema 图中能够包含的点类型和边类型,从而限制图库的内容。一个 Fixed Schema 图只能包含图类型中规定的点类型和边类型。

管理员可以在 GQL 模式下,通过目录层次结构,基于图类型创建图。也可以基于单一图类型创建多个图。

以下图类型定义了 2 种点类型和 2 种边类型:

/* 示例改编自 Alastair Green 2024-03-26 */CREATE GRAPH TYPE /MyFolder/control/fraud_TYPE // DDL     (customer:Customer => {id::STRING, name::STRING}),     (account:Account => {no::STRING, acct_type::STRING }),     (customer)-[:HOLDS]->(account),     (account)-[:TRANSFER {amount::INTEGER}]->(account)
复制代码

使用图类型创建图时,图的内容将被限制为图类型中所描述的点类型和边类型。

CREATE GRAPH /MyFolder/control/fraud /* 图名为 “fraud” */  TYPED /MyFolder/control/fraud_TYPE /* 图类型是 fraud_TYPE */
复制代码

当数据修改完成时,修改内容必须符合图类型指定的限制。如果数据不符合图类型定义,则该语句会导致异常,并且将进行事务回滚。

USE GRAPH fraudINSERT // DML     (d:Customer {id: 'AB23', name: 'Doe'}),     (r:Customer {id: 'CH45', name: 'Reiss'}),     (a1:Account {no: '25673890', type: 'C'}),     (a2:Account {no: '05663981', type: 'C'}),     (d)-[:HOLDS]->(a1),     (r)-[:HOLDS]->(a2),     (a1)-[:TRANSFER {amount: 5000}]->(a2)USE GRAPH fraudMATCH // DQL     (c1:Customer)-[:HOLDS]->(a1:Account)     -[t:TRANSFER]->     (a2:Account)<-[:HOLDS]-(c2:Customer)RETURN c1.name, a1.no, t.amount, c2.name, a2.no/*'Doe', '25673890', 5000, 'Reiss', '05663981' 1 row returned*/
复制代码

点和边与表格相比如何?

在 SQL 数据库中,数据以记录的形式存储在表格中,每个表格都有固定的结构。表格之间的关系可以通过约束来强制实施,但编写查询的人(或程序)需要理解表格之间的关系。


在属性图数据库中,抽象级别被提高,允许将一组表格视为一个单元(称为“数据乘积 Data Product”)。


带有特定标签(或多个标签)的点,在功能上类似于一个表格。然而,MATCH 查询可以根据点的指定特征来访问点,而不受标签的限制。

边被用来描述节点之间的关系。编写查询的人(或程序)可以查询这些关系,而不需要预先知道这些关系的具体情况。

总结 

本文简要介绍了 GQL 数据库语言的功能。完整的 GQL 语言还支持额外的功能,这些超出了本文档的范围。GQL 数据库语言的设计考虑了未来的发展,将来准备在目录中加入更多形式的数据,并已经为返回非表格结果(例如图)做好了准备。


作为国内图数据库领域的先驱,杭州悦数一直致力于推进图行业前沿技术的进步发展。我们的多位图数据库研发专家是 ISO/IEC JTC 1/SC 32/WG 3 工作组成员,参与 GQL 标准的制定以及后续版本的更新。后续,我们的专家将更详细地介绍 GQL 以及它对于图行业、对于企业用户的意义和能力,敬请关注。

用户头像

国产原生分布式图数据库 2023-05-12 加入

高性能、高并发、易扩展,带你实时探索海量关联数据

评论

发布
暂无评论
ISO 专家解读 | 什么是 GQL 国际标准图查询语言_图数据库_悦数图数据库_InfoQ写作社区