数据库语言 GQL

news/2024/9/11 2:45:33/ 标签: 数据库, 知识图谱

什么是数据库语言 GQL?

一种针对属性图数据库语言的新标准,ISO/IEC 39075 信息技术—数据库语言—GQL,刚刚发布1。但GQL是什么?这个标准包含哪些内容?

这个新标准由国际标准委员会ISO/IEC JTC1 SC32 WG3 数据库语言小组开发。忽略那些标准的层级缩写,SC32 WG3是国际委员会,也负责开发和改进SQL数据库语言。SC32 WG3的参与者(个人专家)由世界各国标准流程委派。

当标准委员会开始讨论属性图数据库语言的新标准时,我们选择了“GQL”这个名字。GQL可能是Graph Query Language(图查询语言)的缩写,尽管这个名字主要是为了与SQL数据库语言并行。

SQL国际标准的初始版本(ISO/IEC 9075 - 数据库语言—SQL)于1987年发布。从那时起,SQL标准不断修订并纳入了各种新技术2。2019年,批准了一个新项目,以制定一个专注于属性图数据库的并行标准,即数据库语言GQL。这对标准机构和行业都具有重要意义,因为这是ISO在35多年来首次发布新的数据库查询语言。

属性图数据库在大数据、NoSQL技术领域近期变得尤为突出。属性图数据的一个显著特征是,在数据中创建关系,以便用户可以编写声明性查询而无需指定关系。与将数据结构化为表格的关系模型不同,属性图模型在数据库内部将数据结构化为图3。这支持了基于模式的新类型分析,同时也能够以最小的开销灵活地添加新类型的数据。实际应用范围从数字孪生到反洗钱,再到药物发现、供应链分析、知识图谱和通用人工智能(GenAI)等。新模型与语言的联合承诺,以及该领域显著且日益增长的应用,在很大程度上促成了作为SQL兄弟语言的新ISO标准的制定。

属性图数据库存储和检索节点(顶点)和边(关系)。GQL标准中指定的声明性语言既受到现有属性图数据库产品的影响,也受到SQL标准的影响。

GQL标准是一种完整的数据库语言,支持创建、读取、更新和修改属性图数据。属性图数据可以是无模式的,也可以由完整的图形类型(属性图模式)约束。

1 GQL标准于2024年4月11日正式发布。
2 ISO/IEC 9075 - 数据库语言—SQL的11部分于2023年6月发布。
3 图论 - 维基百科


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

GQL是一种数据库语言,而不仅仅是图查询语言。与SQL一样,它定义了一个从持久且可扩展的目录初始化的运行时环境。目录枚举通过经过身份验证的会话使用事务性工作单元访问的存储数据对象。它支持插入、更新、删除和读取由目录条目创建和引用的属性图,这些图的内容可以是未受约束的,或者由管理员定义的数据模型(称为图形类型)规定。这些图形类型作为GQL(遵循SQL)称为“GQL模式”的一部分指定:目录中专用于元数据和数据定义的容器,还通过定义数据所有权来启用安全模型的基础,数据所有权由经过身份验证的主体(用户)拥有。

GQL包含了许多现有商业图查询语言的功能,如openCypher(最初由Neo4j Inc.开发)、GSQL(Tigergraph Inc.)、PGQL(Oracle Inc.)以及LDBC的研究语言G-Core。它还与SQL/PGQ5共享一个基于Cypher的图模式匹配子语言(非正式地称为GPML4),SQL/PGQ是SQL的一个只读扩展,允许通过专用视图访问的表格数据被视为属性图。GPML将数据图与模式图进行匹配,返回数据图子图的表格表示。

属性图用例

属性图被私人和公共金融机构使用,这些机构希望(有时甚至是法律要求)识别潜在的犯罪行为,如洗钱。例如,从A到B到C再到A的一系列资金转移可能表明洗钱。同样,在评估投资组合风险、借贷双方偿付能力、反欺诈、客户360视图以及许多其他用例中也是如此。属性图还用于建模公用事业基础设施,如水分配、电力分配和电信网络。这里的典型查询包括识别在分配网络的特定点添加新负载或分布式发电(如风能或太阳能)的潜在影响和益处,以及设计、维护、故障排除和网络安全。


其他用例包括但不限于社交网络、物料清单、访问控制、产品推荐、引用网络、路由、影响者检测、蛋白质相互作用网络、影响分析和生成式人工智能。

GQL示例

以下示例通过示例简要介绍了GQL的功能:

  • 查询和图模式匹配
  • 添加、修改和删除数据
  • 事务
  • 无模式和固定模式

查询和图模式匹配

GQL查询使用丰富的图模式匹配(GPM)语言。以下示例查找与名为’Avery’的节点具有一跳关系的所有节点:

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

请注意,变量a、b和c在MATCH语句中定义,并可以在查询后面的部分(在本例中为RETURN语句)中引用。查询编写者无需知道“Avery”与其他节点之间的关系。

GQL标准没有指定如何将返回的数据显示给用户。一种方式是以图形形式显示数据:图形可视化工具可以显示检索到的数据之间的关系,并根据需要展开以显示更多详细信息。另一种表示数据的方式是文本。请注意,这个查询版本的返回数据较少,以便示例适应页面宽度。

MATCH (a {firstname: 'Avery'})-[b]->(c)
RETURN a.firstname, b, c.name
+------------------------------------------------------------+
| a.firstname | b           | c.name  |
+------------------------------------------------------------+
| "Avery"     | [:LivesIn {...}] | "Granville" |
| "Avery"     | [:HasPet]      | "Unique"    |
+------------------------------------------------------------+

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

/* 简单QPP */
MATCH ((a)-[r]->(b)){1,5}
RETURN a, r, b

此示例将找到路径,其中一个节点知道另一个节点,最多经过五个跳。也可以执行更复杂的量化路径模式。

添加、修改和删除

之前示例中的GQL数据使用INSERT语句创建。例如:

/* 插入一个节点 */
INSERT (:Pet {name: 'Unique', pettype: 'Dog'})

在这个例子中,“Pet”是一个标签,“name”和“pettype”是属性。标签是存在或不存在的标识符。属性是名称和值的对。节点(顶点)和边(关系)都可以有标签和属性。

节点用括号括起来,而边用方括号括起来。

GQL的INSERT语句可以使用复杂的图模式。以下语句插入两个节点和它们之间的边:

/* 插入两个节点和一条边 */
INSERT (:Person {firstname: 'Avery', lastname: 'Stare', joined: date("2022-08-23")})
-[:LivesIn {since: date("2022-07-15")}]->
(:City {name: 'Granville', state: 'OH', country: 'USA'})

INSERT语句可以对MATCH语句的结果进行操作:

/* 在Avery和他们的狗之间创建一条边。 */
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=26
MATCH (e {lastname: 'Stare'})
REMOVE e.joined

通过识别节点,分离它们以删除关系,然后删除节点来删除GQL数据。例如:

/* 删除Avery和相关节点 */
MATCH (a {firstname: 'Avery'})-[b]->(c)
DETACH DELETE a, c

事务

GQL支持可序列化事务,并允许额外的实现定义的事务模式。事务通过显式或隐式的START TRANSACTION语句开始,并通过COMMIT或ROLLBACK语句终止。GQL实现也可能提供自动事务启动和提交。

无模式和固定模式图

GQL支持无模式图,对输入的数据没有限制,以及固定模式图,其中图可以通过图形类型创建,该图形类型指定了图中可以存在的节点和关系类型的限制。

无模式图将接受插入的任何数据。这允许快速启动,但将数据的控制权留给应用程序开发人员和/或用户。

GQL标准还支持创建图形类型的能力。图形类型是一个模板,通过完全指定可以包含在从特定图形类型创建的固定模式图中的节点和边类型来限制图的内容。基于图形类型创建的固定模式图只能包含图形类型中指定的节点类型和边类型。

管理员可以在GQL模式的目录层次结构内的目录中基于图形类型创建图。可以基于单个图形类型创建多个图。

以下图形类型定义了两个节点类型和两个边类型。

/* 示例改编自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 // 数据操纵语言
(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 // 数据查询语言
(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 行返回
*/

节点和边与表的比较

在SQL数据库中,数据作为表中的记录存储,每个表具有固定的结构。表之间的关系可以通过约束来强制执行,但编写查询的人(或程序)必须了解表之间的关系。

在属性图数据库中,抽象级别提高,允许将整个表集视为一个单元(“数据产品”)。

具有特定标签(或标签集)的节点大约相当于一个表。然而,MATCH查询可以访问具有特定特征的节点,而无需考虑标签。

边可以被插入以描述节点之间的关系。编写查询的人(或程序)可以查询关系,而无需知道存在哪些关系。

总结

本文档简要介绍了GQL数据库语言的功能。完整的GQL语言支持超出本文档范围的其他功能。GQL数据库语言设计为未来增长做准备,能够纳入目录中更多形式的数据,并准备返回非表格结果(例如图形)。

作者
Keith W. Hare, JTC 1/SC 32/WG 3 Database Languages
www.jtc1info.org
JTC1News@gmail.com
ISO-IEC/JTC 1/AG 1 Communications



http://www.ppmy.cn/news/1474567.html

相关文章

传言称 iPhone 16 Pro 将支持 40W 快速充电和 20W MagSafe

目前&#xff0c;iPhone 15 和 iPhone 15 Pro 机型使用合适的 USB-C 电源适配器可实现高达 27W 的峰值充电速度&#xff0c;而 Apple 和授权第三方的官方 MagSafe 充电器可以高达 15W 的功率为 iPhone 15 机型进行无线充电。所有四款 iPhone 15 机型均可使用 20W 或更高功率的电…

什么是区块链的“智能合约”

区块链的“智能合约”是一种存储在区块链上的计算机协议&#xff0c;它能够自动执行合约条款&#xff0c;并在满足预设条件时自动执行相关操作。智能合约通过编程语言&#xff08;如Solidity&#xff09;编写&#xff0c;可以在去中心化的环境中运行&#xff0c;无需人工干预。…

frameworks 之Zygote

frameworks 之Zygote Zygote.rc 解析Zygote 启动ZygoteInit.javaZygote.cppLiunx fork Zygote 中文意思为受精卵。 和其意思一样&#xff0c;该功能负责android系统孵化service 和 app 进程。 本文讲解Zygote的大概流程。涉及的相同的类&#xff0c;如下所示 system/core/rootd…

Python图形用户界面的文本文件加密工具

Python图形用户界面的文本文件加密工具 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5oEvdLE-1720676762602)(https://i-blog.csdnimg.cn/direct/ddf0cd975b2d48a9a2f3b35c55e00add.png)] 设计方案 DES.py DESAlgorithm 类负责管理密钥并提供…

FlutterWeb渲染模式及提速

背景 在使用Flutter Web开发的网站过程中&#xff0c;常常会遇到不同浏览器之间的兼容性问题。例如&#xff0c;在Google浏览器中动画和交互都非常流畅&#xff0c;但在360浏览器中却会出现卡顿现象&#xff1b;在Google浏览器中动态设置图标颜色正常显示&#xff0c;而在Safa…

Linux下解压.tar.gz文件

.tar.gz 是一种常用的压缩包格式&#xff0c;尤其在Unix、Linux以及macOS系统中非常普遍。这个格式结合了两种不同的功能&#xff1a; Tar (.tar): “Tar” 是“Tape Archive”的缩写&#xff0c;最初是为了将数据备份到磁带上而设计的。Tar命令可以将多个文件和目录打包成一个…

markdown文件转pdf

将Markdown文件转换为PDF可以通过多种方法实现&#xff0c;包括使用Visual Studio Code、在线工具、以及命令行工具。 使用Visual Studio Code&#xff1a; 1.安装“Markdown PDF”插件&#xff1a;在VS Code中&#xff0c;通过点击左侧菜单栏的扩展图标&#xff0c;搜…

系统迁移从CentOS7.9到Rocky8.9

我有两台阿里云上的服务器是CentOS7.9&#xff0c;由于CentOS7已经停止支持&#xff0c;后续使用的话会有安全漏洞&#xff0c;所以需要尽快迁移&#xff0c;个人使用的话目前兼容性好的还是RockyLinux8&#xff0c;很多脚本改改就能用了。 一、盘点系统和迁移应用 查看当前系…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…

centos9中mysql指令提示解决方案

CentOS 9 中没有 MySQL 的官方插件&#xff0c;因为 MySQL 不是 CentOS 的默认数据库&#xff0c;它是 MariaDB 的一部分。 如果想要一个命令行提示的 MySQL 客户端&#xff0c;可以使用第三方工具 &#xff0c;如mycli 首先&#xff0c;确保已经安装了 MySQL&#xff0c;且操…

7月10日学习打卡,环形链表+栈OJ

前言 大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有…

解决鸿蒙开发中克隆项目无法签名问题

文章目录 问题描述问题分析解决方案 问题描述 在一个风和日丽的早晨&#xff0c;这是我学习鸿蒙开发的第四天&#xff0c;把文档过了一遍的我准备看看别人的项目学习一下&#xff0c;于是就用git去clone了一个大佬的开源项目&#xff0c;在签名的时候遇到了问题&#xff1a; h…

Visual Studio编译优化选项

目录 /O1 和 /O2 /Ox 内联函数 虚函数优化 代码重排 循环优化 链接时间优化 代码分割 数学优化 其他优化选项 在Visual Studio中&#xff0c;编译优化选项是用于提高程序性能的重要工具。编译器提供了多种优化级别和选项&#xff0c;可以根据不同的需要进行选择。 在…

(Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpeg 一、安装MSYS2 MSYS2 是 Windows 下的一组编译套件&#xff0c;它可以在 Windows 系统中模拟 Linux 下的编译环境&#xff0c;如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。 MSYS2 的安装也非常省心&#x…

如何在vue的项目中导入阿里巴巴图标库

阿里巴巴矢量图标库官网&#xff1a;iconfont-阿里巴巴矢量图标库 选择你喜欢的图标&#xff0c;添加入库 点击添加至项目&#xff0c;并新建文件夹&#xff0c;点击确定 选择font-class&#xff0c;点击生成代码 代码生成后&#xff0c;在网站上打开 全选复制到style 点击复制…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板&#xff0c;适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

【Python】Requests 库使用示例

本文使用Pythonrequests库对微博页面进行数据抓取和简单的数据清洗 使用Requests库进行网络爬虫 requests是一个Python的HTTP客户端库&#xff0c;用于发送HTTP请求。它简单易用&#xff0c;同时提供了足够的功能来处理各种网络请求。 1. 安装requests库 在Python中安装req…

【集成平台】大数据集成平台建设方案(原件word)

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; 基于平台的基础架构&…

从 Github 安装 R packages 不完全指南

前言 R语言&#xff0c;一个被广泛使用的统计计算和数据分析工具。在日常使用过程中&#xff0c;需要安装实现各种功能、来自各种渠道的工具包&#xff08;packages&#xff09;比如&#xff1a;CRNA或者Github。很多包已经发布在 CRAN 上&#xff0c;使用 install.packages(&q…

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 库中的浏览器特性支持检测

深入探讨JavaScript库&#xff1a;功能、配置与应用场景 前言 在现代的Web开发中&#xff0c;JavaScript库扮演着至关重要的角色&#xff0c;帮助开发人员简化代码、提高效率、实现更好的用户体验。本文将探讨几个常用的JavaScript库&#xff0c;包括模块加载库、数据绑定库和…