
本文翻译自官方文献:https://jtc1info.org/slug/gql-database-language/,感兴趣的小伙伴可自行阅读原文。
作者:Keith W. Hare, JTC 1/SC 32/WG 3 Database Languages
GQL 吸收了众多现有商业图查询语言的特性,包括由 Neo4j Inc. 开发的 openCypher、Tigergraph Inc. 的 GSQL、Oracle Inc. 的 PGQL,以及 LDBC 的研究语言 G-Core。此外,它还与 SQL/PGQ 共享一个从 Cypher 派生的图模式匹配子语言(非正式称为 GPML4),该语言是 SQL 的只读扩展,允许将通过专用视图访问的表格数据当作属性图处理。GPML 通过将模式图与数据图进行匹配,返回数据图的子图的表格表示形式。
属性图的其他应用场景还包括(但不限于)社交网络、物料清单、访问控制、产品推荐、引用网络、路由策略、影响力检测、蛋白质交互网络、影响评估,以及生成式 AI。
-
查询和图模式匹配 -
添加、修改以及删除数据 -
事务处理 Schema Free 图和 Fixed Schema 图
查询和图模式匹配
MATCH (a {firstname: 'Avery'})-[b]->(c)
RETURN a, b, c

图可视化工具能够展示出查询到的数据之间的关系,并在需要时展开显示更多细节。
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" |
+------------------------------------------------------------+
/* 简单的查询 */
MATCH ((a)-[r]->(b)){1,5}
RETURN a, r, b
增删改图数据
/* 插入 1 个点 */
INSERT (:Pet {name: 'Unique', pettype: 'Dog'})
/* 插入 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'})
/* 新建一条连接 Avery 和宠物狗 Unique 的边 */
MATCH (a {firstname: 'Avery'})
,(d {name: 'Unique'})
INSERT (a)-[:HasPet]->(d)
MATCH (d:Pet) where d.name="Unique"
SET d.weight_kg=26
MATCH (e {lastname: 'Stare'})
REMOVE e.joined
/* 删除 Avery 和相关的点 */
MATCH (a {firstname: 'Avery'})-[b]->(c)
DETACH DELETE a, c
事务
GQL 支持可序列化的事务,且支持额外的自定义事务模式。事务可以通过显式或隐式的 START TRANSACTION 语句启动,并通过 COMMIT 或 ROLLBACK 语句结束。GQL 还支持自动事务的启动和提交。
Schema Free 与 Fixed Schema 图
/* 示例改编自 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
*/
边被用来描述节点之间的关系。编写查询的人(或程序)可以查询这些关系,而不需要预先知道这些关系的具体情况。
-
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
编辑 & 校对:清蒸

