GQL (图形查询语言)

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于:✅ Azure 数据资源管理器

GQL(图形查询语言)是用于查询使用标准化图形模式匹配的图形数据库的新兴 ISO 标准。 它遵循 ISO GQL 标准

入门

若要使用 GQL,需要一个 图形 数据源(建议用于生产方案)或返回暂时性图形的函数(以 生成图形 运算符结尾)。

先决条件

创建图形并设置用于查询的图形引用。 请按照此处所述的步骤进行操作。

查询示例

典型的 GQL 查询以MATCH模式开头,可以选择筛选和聚合匹配的行,并可以链接更多处理阶段。NEXT 以下查询使用电影图查找名称以 1990 年或更高版本上映的多个电影开头 TK 出现在多个电影中的演员,从大多数电影排序到最少:

MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE m.Year >= 1990 AND p.Name STARTS WITH 'T'
RETURN p.Name AS actor, COUNT(m) AS movieCount
NEXT
FILTER movieCount > 1
RETURN actor, movieCount
ORDER BY movieCount DESC
LIMIT 1
参与者 movieCount
卢宁 3

按子句读取查询子句:

  • MATCH (p:Person)-[:ACTED_IN]->(m:Movie)描述要查找的模式:具有Person绑定到变量的标签的节点,由带p标签的边缘连接,到具有ACTED_IN绑定到变量Moviem的标签的节点。 标签 (:Person, , :ACTED_IN:Movie) 限制哪些实体匹配,以及变量 (p,) m允许在后面的子句中引用匹配的实体。 箭头 -> 设置从演员到电影的方向。 每个查询都必须以 MATCH.
  • WHERE m.Year >= 1990 AND p.Name STARTS WITH 'T' filter the matched rows by a predicate before the returned, here keeping only movies in 1990 or later, the actor's name starts with T. 是字符串谓词;还可以将值的末尾与 值末尾匹配,或者使用 查找值 中的任何位置的子字符串。
  • RETURN p.Name AS actor, COUNT(m) AS movieCount 投影输出列,并使用 重命名它们 AS。 它包括一个聚合, COUNT(m)该聚合按另一个返回的列(p.Name)进行分组,并为每个执行组件生成一行,其中包含匹配的电影数。
  • NEXT 将上一段的结果管道传递到新的查询段,以便可以继续处理刚刚生成的行,包括 movieCount 聚合。
  • FILTER movieCount > 1 仅保留满足谓词的行。 FILTER与在一WHERE起时充当独立声明WHERE相同MATCHWHERE 性能更高,因为它允许在查询早期消除冗余数据。
  • RETURN actor, movieCount 投影最终列,并将 ORDER BY movieCount DESC 结果从最高的电影计数排序到最低。
  • LIMIT 1 排序后第一行将结果上限。

每个子句都是可选的,但除外 MATCH。 省略聚合、NEXTFILTERLIMIT简单查找,并在需要聚合时合并它们,然后筛选聚合值。

小窍门

为了获得更好的性能,请尽可能少地使用子 MATCH 句,理想情况下每个查询一个子句。 单个 MATCH 子句仍可根据需要保持复杂:该模式可能非常复杂,并且可以包括连接的组件、可变长度边缘等。

小窍门

每当条件可以针对匹配的模式表示时,首选 WHERE 于独立 FILTER模式。 WHEREMATCH 模式匹配一起并评估为模式匹配的一部分,因此整个查询更高效地运行。 FILTER仅当需要筛选后续阶段生成的值(例如之后或聚合)NEXT时使用。

小窍门

用于 RETURN COUNT(*) 存在检查。 如果只需要检查模式是否存在,则返回 COUNT(*) 而不是返回完整结果。

有关 GQL 的官方国际标准,请参阅 ISO/IEC 39075 信息技术 - 数据库语言 - GQL

GQL 指南

有关 GQL 指南和支持的功能,请参阅 GQL 指南。 有关所有受支持的子句,请参阅 GQL 子句 ,有关函数、运算符和谓词,请参阅 GQL 标量函数

局限性

  • 查询结构:所有查询都必须以 MATCH 语句开头。

  • 无图形修改操作:不支持更改图形结构(如 CREATE/DROP/ALTER GRAPH)INSERT/SET/REMOVE/DELETE和事务(STARTTRANSACTION/COMMIT/ROLLBACK)的操作。 对所有图形创建、修改和管理任务使用 KQL。

  • 不支持的子句EXISTS、、VALUECALLEXCEPTINTERSECT

  • 不支持的函数、聚合和谓词SINH、、 COSHTANHDATETIMELOCAL_TIMELOCAL_DATETIMEZONED_TIMEIS TYPEDDIRECTEDIS LABELEDSOURCE OFDESTINATION OFIS NORMALIZEDALL_DIFFERENTSAMEREGEXP_CONTAINSPOWERLOG(base, x)BYTE_LENGTHOCTET_LENGTHROW_IDBINARY_SEARCHNORMALIZESOURCEDESTINATIONELEMENTSRANGEINNER_NODESNULLIFCOALESCESTDDEV_POPSTDDEV_SAMPPERCENTILE_CONTDISCCOLLECT_ELEMENTSCOLLECT_ONE

  • 不支持的类型BYTES、、BINARYVARBINARYDATETIME

  • 模式匹配MATCH 并且 OPTIONAL MATCH 仅支持节点实体,而不支持边缘模式。 对于每个单子 MATCH 句的多个序列,仅支持单个连接的组件模式。 不支持无目录边缘(~、、<~~>)。 不支持限定路径。

  • 实体等效性检查:不支持使用节点或关系等运算符(=<>例如,MATCH (n)-[]-(m) WHERE n <> m)检查实体等效性。 请改用 element_id() 函数或显式字段比较,例如 n.id <> m.id

  • 不同:不支持直接应用于 DISTINCT 实体。 或者,将实体转换为字符串,例如: MATCH p = (n :Person) RETURN DISTINCT tostring(p)

  • 持续时间粒度:持续时间最多支持数天,小单位数到纳秒。 不支持大于日单位(例如周、月、年)。

注释

  • 保留关键字:某些 GQL 关键字不能用作查询中的标识符,某些保留关键字并不立即明显。 如果图形数据具有与 GQL 保留关键字冲突的属性名称,请在图形架构中使用不同的属性名称或重命名它们以避免分析冲突。 最佳做法是转义这些名称, backticks 并添加前缀或后缀,例如 _

  • 时间和时区:引擎以 UTC 方式运行。 日期/时间文本必须使用适当的格式;仅通过 ZONED_DATETIME(“2011-12-31 23:59:59.9”)支持 UTC 时区。