GQL 快速参考

注释

此功能目前处于公开预览状态。 此预览版在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版的使用条款

本文是 Microsoft Fabric 中图形的 GQL(图形查询语言)语法的快速参考。 有关详细说明,请参阅 GQL 语言指南

注释

本文主要使用 社交网络示例图形数据集。 它还提供了一些示例,这些示例使用 图形教程中的 Adventure Works 数据集。

查询结构

GQL 查询使用一系列语句来定义要从图形获取的数据、如何处理数据以及如何显示结果。 每个语句都有一个特定的用途,它们共同创建一个与图形中的数据匹配的线性管道,并逐步转换数据。

典型查询流:
GQL 查询通常通过指定要匹配的图形模式开始。 然后,它使用可选语句创建、筛选、排序、分页和结果输出。

Example:

MATCH (n:Person)-[:knows]->(m:Person) 
LET fullName = n.firstName || ' ' || n.lastName 
FILTER m.gender = 'female' 
ORDER BY fullName ASC 
OFFSET 10
LIMIT 5 
RETURN fullName, m.firstName

语句顺序:

重要

graph 尚不支持任意语句组合。 请参阅 有关当前限制的文章。

语句通常可以按查询中的任何顺序显示:

  • MATCH – 指定要查找的图形模式。
  • LET – 从表达式中定义变量。
  • FILTER – 保留行匹配条件。
  • ORDER BY – 对结果进行排序。
  • OFFSET – 跳过许多行。
  • LIMIT – 限制行数。
  • RETURN – 输出最终结果。

每个语句都基于上一个语句生成,以便以增量方式优化和调整查询输出。 有关每个语句的详细信息,请参阅以下部分。

查询语句

MATCH

在数据中查找图形模式。

语法:

MATCH <graph pattern> [ WHERE <predicate> ]
...

Example:

MATCH (n:Person)-[:knows]-(m:Person) WHERE n.birthday > 2000
RETURN *

有关该语句的详细信息 MATCH ,请参阅 Graph 模式

使用表达式创建变量。

语法:

LET <variable> = <expression>, <variable> = <expression>, ...
...

Example:

MATCH (n:Person)
LET fullName = n.firstName || ' ' || n.lastName
RETURN fullName

有关该语句的详细信息 LET ,请参阅 GQL 语言指南

过滤器

保留与条件匹配的行。

语法:

FILTER [ WHERE ] <predicate>
...

Example:

MATCH (n:Person)-[:knows]->(m:Person)
FILTER WHERE n.birthday > m.birthday
RETURN *

有关该语句的详细信息 FILTER ,请参阅 GQL 语言指南

排序依据

对结果进行排序。

语法:

ORDER BY <expression> [ ASC | DESC ], ...
...

Example:

MATCH (n:Person)
RETURN *
ORDER BY n.lastName ASC, n.firstName ASC

重要

请求的行顺序仅保证在前 ORDER BY 一个语句之后立即成立。 任何以下语句(如果存在)都不能保证保留任何此类顺序。

有关该语句的详细信息 ORDER BY ,请参阅 GQL 语言指南

OFFSET/LIMIT

跳过行并限制结果数。

语法:

OFFSET <offset> [ LIMIT <limit> ]
LIMIT <limit>
...

Example:

MATCH (n:Person)
ORDER BY n.birthday
OFFSET 10 LIMIT 20
RETURN n.firstName || ' ' || n.lastName AS name, n.birthday

有关和OFFSET语句的详细信息LIMIT,请参阅 GQL 语言指南

RETURN

输出最终结果。

语法:

RETURN [ DISTINCT ] <expression> [ AS <alias> ], ...

Example:

MATCH (n:Person)
RETURN n.firstName, n.lastName

有关该语句的详细信息 RETURN ,请参阅 GQL 语言指南

图形模式

图形模式描述要匹配的图形结构。

节点模式

图形数据库中,使用节点来表示实体,例如人员、产品或位置。

节点模式描述如何匹配图形中的节点。 可以按标签或绑定变量进行筛选。

(n)              -- Any node
(n:Person)       -- Node with Person label  
(n:City&Place)   -- Node with City AND Place label
(:Person)        -- Person node, don't bind variable

有关节点模式的详细信息,请参阅 图形模式

边缘模式

边缘模式指定节点之间的关系,包括方向和边缘类型。 在图形数据库中,边缘表示两个节点之间的连接或关系。

<-[e]-             -- Incoming edge
-[e]->             -- Outgoing edge
-[e]-              -- Any edge
-[e:knows]->       -- Edge with label ("relationship type")
-[e:knows|likes]-> -- Edges with different labels
-[:knows]->        -- :knows edge, don't bind variable

有关边缘模式的详细信息,请参阅 图形模式

标签表达式

使用标签表达式,可以使用逻辑运算符将节点与特定标签组合匹配。

:Person&Company                  -- Both Person AND Company labels
:Person|Company                  -- Person OR Company labels
:!Company                        -- NOT Company label
:(Person|!Company)&Active        -- Complex expressions with parentheses

有关标签表达式的详细信息,请参阅 图形模式

路径模式

路径模式描述遍历图,包括跃点计数和变量绑定。

(a)-[:knows|likes]->{1,3}(b)      -- 1-3 hops via knows/likes
p=()-[:knows]->()                 -- Binding a path variable

有关路径模式的详细信息,请参阅 图形模式

多个模式

使用多个模式匹配单个查询中的复杂非线性图形结构。

(a)->(b), (a)->(c)               -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d)          -- Nonlinear structures

有关多个模式的详细信息,请参阅 图形模式

值和值类型

基本类型

基本类型是基元数据值,如字符串、数字、布尔值和日期时间。

STRING           -- 'hello', "world"
INT64            -- 42, -17
FLOAT64          -- 3.14, -2.5e10
BOOL             -- TRUE, FALSE, UNKNOWN
ZONED DATETIME   -- ZONED_DATETIME('2023-01-15T10:30:00Z')

有关基本类型的详细信息,请参阅 GQL 值和值类型

引用值类型

引用值类型是用作查询中的值的节点和边缘。

NODE             -- Node reference values
EDGE             -- Edge reference values

有关引用值类型的详细信息,请参阅 GQL 值和值类型

集合类型

集合类型对多个值(如列表和路径)进行分组。

LIST<INT64>      -- [1, 2, 3]
LIST<STRING>     -- ['a', 'b', 'c']
PATH             -- Path values

有关集合类型的详细信息,请参阅 GQL 值和值类型

材料类型和可归还类型

每个值类型都是可为 null 的(包括 null 值)或材料(不包括该值)。 默认情况下,除非显式指定 NOT NULL类型,否则类型为 null。

STRING NOT NULL  -- Material (Non-nullable) string type
INT64            -- Nullable (default) integer type

表达式和运算符

Conditional

条件表达式根据条件返回不同的值。

CASE WHEN cond THEN val ELSE val END   -- Searched CASE
CASE expr WHEN val THEN val ELSE val END -- Simple CASE
NULLIF(a, b)                           -- NULL if a = b

有关条件表达式的详细信息,请参阅 GQL 表达式和函数

Comparison

比较运算符比较值并检查是否相等、排序或 null。

=, <>, <, <=, >, >=              -- Standard comparison
IS NULL, IS NOT NULL             -- Null checks

有关比较谓词的详细信息,请参阅 GQL 表达式和函数

Logical

逻辑运算符在查询中合并或否定布尔条件。

AND, OR, NOT, XOR               -- Boolean logic

有关逻辑表达式的详细信息,请参阅 GQL 表达式和函数

Arithmetic

算术运算符对数字执行计算。

+, -, *, /                       -- Basic arithmetic operations

有关算术表达式的详细信息,请参阅 GQL 表达式和函数

字符串模式

字符串模式谓词与字符串中的子字符串、前缀或后缀匹配。

n.firstName CONTAINS 'John'          -- Has substring
n.browserUsed STARTS WITH 'Chrome'   -- Starts with prefix
n.locationIP ENDS WITH '.1'          -- Ends with suffix

有关字符串模式谓词的详细信息,请参阅 GQL 表达式和函数

列举操作

列表作测试成员身份、访问元素和度量列表长度。

n.gender IN ['male', 'female']    -- Membership test
n.tags[0]                        -- First element
size(n.tags)                     -- List length

有关列表成员身份谓词的详细信息,请参阅 GQL 表达式和函数

属性访问从节点或边缘获取属性的值。

n.firstName                      -- Property access

有关属性访问的详细信息,请参阅 GQL 表达式和函数

Functions

聚合函数

聚合函数计算行组(垂直聚合)或组列表元素(水平聚合)的汇总值。

count(*)                         -- Count all rows
count(expr)                      -- Count non-null values
sum(p.birthday)                  -- Sum values
avg(p.birthday)                  -- Average
min(p.birthday), max(p.birthday) -- Minimum and maximum values
collect_list(p.firstName)        -- Collect values into a list

详细了解 GQL 表达式和函数中的聚合函数。

字符串函数

使用字符串函数可以处理和分析字符串值。

char_length(s)                   -- String length
upper(s), lower(s)               -- Change case (US ASCII only)
trim(s)                          -- Remove leading and trailing whitespace
string_join(list, separator)     -- Join list elements with a separator

详细了解 GQL 表达式和函数中的字符串函数。

列表函数

使用列表函数可以处理列表,例如检查长度或剪裁大小。

size(list)                       -- List length
trim(list, n)                    -- Trim a list to be at most size `n`

有关列表函数的详细信息,请参阅 GQL 表达式和函数

图形函数

图形函数允许从节点、路径和边缘获取信息。

labels(node)                     -- Get node labels
nodes(path)                      -- Get path nodes
edges(path)                      -- Get path edges
elements(path)                   -- Get all path nodes and edges
path_length(path)                -- Get number of edges in a path

有关图形函数的详细信息,请参阅 GQL 表达式和函数

时态函数

临时函数允许使用日期和时间值。

zoned_datetime()               -- Get the current timestamp

有关临时函数的详细信息,请参阅 GQL 表达式和函数

泛型函数

泛型函数允许你以常用方式处理数据。

coalesce(expr1, expr2, ...)    -- Get the first non-null value
to_json_string(value)          -- Convert value to JSON string
nullif(a, b)                   -- NULL if a = b, else a

有关泛型函数的详细信息,请参阅 GQL 表达式和函数

常见模式

本部分介绍一些可以使用的常见 GQL 查询模式。

社交网络示例

这些示例使用 社交网络示例图形数据集

查找类型的所有节点

-- Get all nodes with a specific label
MATCH (p:Person) RETURN p

查找具有特定属性的节点

-- Filter nodes by property value
MATCH (p:Person) FILTER p.firstName = 'Annemarie' RETURN p

查找连接

-- Friends of friends  
MATCH (me:Person {firstName: 'Annemarie'})-[:knows]->{2}(fof:Person)
WHERE fof <> me
RETURN DISTINCT fof.firstName

遍历关系

-- Multi-hop traversal through different edge types
MATCH (p:Person)-[:knows]->(f:Person)-[:isLocatedIn]->(c:City)
RETURN p.firstName, f.firstName, c.name

集合体

-- Count by group
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name AS name, count(*) AS population
GROUP BY name
ORDER BY population DESC

前K页

-- Top 10
MATCH (p:Person)-[:hasCreator]-(m:Post)
RETURN p.firstName AS name, count(m) AS posts
GROUP BY name
ORDER BY posts DESC
LIMIT 10

筛选和条件

-- Complex conditions
MATCH (p:Person)-[:isLocatedIn]->(c:City)
WHERE p.birthday >= 19800101 AND p.birthday <= 20000101
  AND c.name IN ['Seattle', 'Portland']
  AND p.firstName IS NOT NULL
RETURN p.firstName, p.birthday

路径遍历

-- Variable length paths
MATCH p = TRAIL (src:Person {firstName: 'Annemarie'})-[:knows]->{1,3}(dst:Person)
WHERE dst.firstName = 'Alexander'
RETURN p

Adventure Works 示例

这些示例使用 图形教程中的 Adventure Works 数据集。

查找所有客户

-- Get all customer nodes
MATCH (c:Customer) RETURN c

按名称查找产品

-- Filter products by name
MATCH (p:Product) FILTER p.productName = 'Mountain Bike' RETURN p

遍历客户订单

-- Multi-hop traversal: customers to orders to products
MATCH (c:Customer)-[:purchases]->(o:Order)-[:contains]->(p:Product)
RETURN c, o, p

按员工统计订单

-- Count orders by employee
MATCH (e:Employee)-[:sells]->(o:Order)
RETURN e.employeeName, count(o) AS total_orders
GROUP BY e.employeeName
ORDER BY total_orders DESC