GQL 制定专家带你解读新的数据库标准语言 GQL 是什么

B站影视 港台电影 2025-09-15 09:39 1

摘要:想必大家这几天都在朋友圈或者公众号收到 ISO(国际标准化组织)继 1987 年发布数据库国际标准 SQL 之后,颁布的第二个数据库查询语言标准 —— ISO/IEC GQL(图查询语言)标准。可能大家看到的 GQL 的介绍比较少,在本文借助 GQL 的官方的

想必大家这几天都在朋友圈或者公众号收到 ISO(国际标准化组织)继 1987 年发布数据库国际标准 SQL 之后,颁布的第二个数据库查询语言标准 —— ISO/IEC GQL(图查询语言)标准。可能大家看到的 GQL 的介绍比较少,在本文借助 GQL 的官方的“口”给大家科普下 GQL 是什么。

本文翻译自官方文献:https://jtc1info.org/slug/gql-database-language/,感兴趣的小伙伴可自行阅读原文。

作者有话说

本文会简要介绍 GQL 数据库语言的功能。完整的 GQL 语言支持的功能众多,文章的篇幅是不能全讲完。但 GQL 数据库语言旨在应对在未来的技术发展,通过灵活地接纳额外形式的数据,并返回非表格结果(例如:图)。

作者:Keith W. Hare, JTC 1/SC 32/WG 3 Database Languages

数据库标准语言 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 一样,它设定了一个从持久化且可扩展的目录初始化的运行时环境。目录列出了存储的数据对象,这些对象通过经过身份验证的会话,并利用事务性工作单元来进行访问。它支持插入、更新、删除和读取属性图,这些属性图是由目录中的条目创建和引用的。这些图的内容可以是 Schema Free 的,也可以由管理员定义的数据模型(图类型)进行约定。这些图类型是 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 语句定义了变量 abc,并能在查询的后续部分引用,本例中是在 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)

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

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

MATCH (d:Pet) where d.name="Unique"
SET d.weight_kg=26

MATCH (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 fraud

INSERT // 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 fraud

MATCH // DQL

(c1:Customer)-[:HOLDS]->(a1:Account)

-[t:TRANSFER]->

(a2:Account)RETURN c1.name, a1.no, t.amount, c2.name, a2.no

/*

'Doe', '25673890', 5000, 'Reiss', '05663981' 1 row returned

*/

点和边与表格相比如何?

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

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

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

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

Graph theory: https://en.wikipedia.org/wiki/Graph_theory

Graph Pattern Matching in GQL and SQL/PGQ: https://arxiv.org/abs/2112.06217

ISO/IEC 9075-16:2023 Information technology – Database languages SQL – Part 16: Property Graph Queries (SQL/PGQ):https://www.iso.org/standard/79473.html

关于 NebulaGraph

NebulaGraph 是一款开源的分布式图数据库,自 2019 年开源以来,先后被美团、京东、360 数科、快手、众安金融等多家企业采用,应用在智能推荐、金融风控、数据治理、知识图谱等等应用场景。

GitHub 地址:https://github.com/vesoft-inc/nebula

编辑 & 校对:清蒸

来源:opendotnet

相关推荐