備註
這項功能目前處於公開預覽狀態。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
本文為 Microsoft Fabric 中圖形 GQL(圖查詢語言)語法的快速參考。 如需詳細說明,請參閱 GQL 語言指南。
這很重要
本文僅使用 社群網路範例圖集。
查詢結構
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
報表順序:
這很重要
Microsoft Fabric 中的圖形尚不支援任意陳述式組合。 請參閱 有關當前限制的文章。
陳述式通常可以在查詢中以任何順序出現:
-
MATCH– 指定要查找的圖形模式。 -
LET– 從表達式定義變數。 -
FILTER– 保持行匹配條件。 -
ORDER BY– 對結果進行排序。 -
OFFSET– 跳過許多行。 -
LIMIT– 限制行數。 -
RETURN– 輸出最終結果。
每個陳述式都以前一個陳述式為基礎,因此您可以累加精簡和調整查詢輸出。 如需每個陳述式的詳細資訊,請參閱下列各節。
查詢陳述式
MATCH
在資料中尋找圖形模式。
Syntax:
MATCH <graph pattern> [ WHERE <predicate> ]
...
Example:
MATCH (n:Person)-[:knows]-(m:Person) WHERE n.birthday > 2000
RETURN *
如需陳述式的詳細資訊 MATCH ,請參閱 圖形模式。
讓
使用運算式建立變數。
Syntax:
LET <variable> = <expression>, <variable> = <expression>, ...
...
Example:
MATCH (n:Person)
LET fullName = n.firstName || ' ' || n.lastName
RETURN fullName
如需此 LET 陳述式的詳細資訊,請參閱 GQL 語言指南。
過濾器
保留符合條件的資料列。
Syntax:
FILTER [ WHERE ] <predicate>
...
Example:
MATCH (n:Person)-[:knows]->(m:Person)
FILTER WHERE n.birthday > m.birthday
RETURN *
如需此 FILTER 陳述式的詳細資訊,請參閱 GQL 語言指南。
排序依據
對結果進行排序。
Syntax:
ORDER BY <expression> [ ASC | DESC ], ...
...
Example:
MATCH (n:Person)
RETURN *
ORDER BY n.lastName ASC, n.firstName ASC
這很重要
所請求的列序僅保證緊接前一個語句後 ORDER BY 立即成立。
後續任何陳述(如有)不保證能維持此類順序。
如需此 ORDER BY 陳述式的詳細資訊,請參閱 GQL 語言指南。
偏移/限制
略過列並限制結果數量。
Syntax:
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
如需 and OFFSETLIMIT 陳述式的詳細資訊,請參閱 GQL 語言指南。
RETURN
輸出最終結果。
Syntax:
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 值和值類型中進一步了解集合類型。
材質型與可歸零型
每個值類型要麼是可空值(包含空值),要麼是材料(排除空值)。
預設情況下,型別是可空的,除非明確指定為 NOT NULL。
STRING NOT NULL -- Material (Non-nullable) string type
INT64 -- Nullable (default) integer type
運算式和運算子
Comparison
比較運算子會比較值,並檢查相等、排序或空值。
=, <>, <, <=, >, >= -- Standard comparison
IS NULL, IS NOT NULL -- Null checks
如需比較述詞的詳細資訊,請參閱 GQL 運算式和函數。
Logical
邏輯運算子會結合或否定查詢中的布林條件。
AND, OR, NOT -- 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
進一步了解 GQL 運算式和函數中的圖形函數。
時間函數
時態函數可讓您使用日期和時間值。
zoned_datetime() -- Get the current timestamp
進一步了解 GQL 運算式和函數中的時態函數。
泛型函數
泛型函數可讓您以常見的方式處理資料。
coalesce(expr1, expr2, ...) -- Get the first non-null value
進一步瞭解 GQL 運算式和函數中的泛型函數。
常見模式
尋找聯繫
-- Friends of friends
MATCH (me:Person {firstName: 'Annemarie'})-[:knows]->{2}(fof:Person)
WHERE fof <> me
RETURN DISTINCT fof.firstName
Aggregation
-- 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