使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息。
适用于:✅ Azure 数据资源管理器
GQL(图形查询语言)是用于查询使用标准化图形模式匹配的图形数据库的新兴 ISO 标准。 它遵循 ISO GQL 标准。
入门
若要使用 GQL,需要一个 图形 数据源(建议用于生产方案)或返回暂时性图形的函数(以 生成图形 运算符结尾)。
先决条件
创建图形并设置用于查询的图形引用。 请按照此处所述的步骤进行操作。
查询示例
典型的 GQL 查询以MATCH模式开头,可以选择筛选和聚合匹配的行,并可以链接更多处理阶段。NEXT 以下查询使用电影图查找名称以 1990 年或更高版本上映的多个电影开头 T 或 K 出现在多个电影中的演员,从大多数电影排序到最少:
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. -
WHEREm.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 withT.是字符串谓词;还可以将值的末尾与 值末尾匹配,或者使用 查找值 中的任何位置的子字符串。 -
RETURN p.Name AS actor, COUNT(m) AS movieCount投影输出列,并使用 重命名它们AS。 它包括一个聚合,COUNT(m)该聚合按另一个返回的列(p.Name)进行分组,并为每个执行组件生成一行,其中包含匹配的电影数。 -
NEXT将上一段的结果管道传递到新的查询段,以便可以继续处理刚刚生成的行,包括movieCount聚合。 -
FILTER movieCount > 1仅保留满足谓词的行。FILTER与在一WHERE起时充当独立声明WHERE相同MATCH。WHERE性能更高,因为它允许在查询早期消除冗余数据。 -
RETURN actor, movieCount投影最终列,并将ORDER BY movieCount DESC结果从最高的电影计数排序到最低。 -
LIMIT 1排序后第一行将结果上限。
每个子句都是可选的,但除外 MATCH。 省略聚合、NEXTFILTERLIMIT简单查找,并在需要聚合时合并它们,然后筛选聚合值。
小窍门
为了获得更好的性能,请尽可能少地使用子 MATCH 句,理想情况下每个查询一个子句。 单个 MATCH 子句仍可根据需要保持复杂:该模式可能非常复杂,并且可以包括连接的组件、可变长度边缘等。
小窍门
每当条件可以针对匹配的模式表示时,首选 WHERE 于独立 FILTER模式。
WHERE 与 MATCH 模式匹配一起并评估为模式匹配的一部分,因此整个查询更高效地运行。
FILTER仅当需要筛选后续阶段生成的值(例如之后或聚合)NEXT时使用。
小窍门
用于 RETURN COUNT(*) 存在检查。 如果只需要检查模式是否存在,则返回 COUNT(*) 而不是返回完整结果。
有关 GQL 的官方国际标准,请参阅 ISO/IEC 39075 信息技术 - 数据库语言 - GQL。
GQL 指南
有关 GQL 指南和支持的功能,请参阅 GQL 指南。 有关所有受支持的子句,请参阅 GQL 子句 ,有关函数、运算符和谓词,请参阅 GQL 标量函数。
局限性
查询结构:所有查询都必须以
MATCH语句开头。无图形修改操作:不支持更改图形结构(如
CREATE/DROP/ALTERGRAPH)INSERT/SET/REMOVE/DELETE和事务(STARTTRANSACTION/COMMIT/ROLLBACK)的操作。 对所有图形创建、修改和管理任务使用 KQL。不支持的子句:
EXISTS、、VALUECALL、EXCEPTINTERSECT。不支持的函数、聚合和谓词:
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、、BINARY、VARBINARYDATE、TIME模式匹配:
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 时区。