大数跨境
0
0

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

GQL 制定专家带你解读新的数据库标准语言 GQL 是什么 NebulaGraph
2024-04-19
1
导读:跟上大部队,来了解下 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 语句启动,并通过 COMMITROLLBACK 语句结束。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)<-[: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 查询可以根据点的指定特征来访问点,而不受标签的限制。

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



延伸阅读 

  • 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

编辑 & 校对清蒸

END

【声明】内容源于网络
0
0
NebulaGraph
一个开源的分布式图数据库
内容 731
粉丝 0
NebulaGraph 一个开源的分布式图数据库
总阅读403
粉丝0
内容731