次の方法で共有


GQL クイック リファレンス

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

この記事は、Microsoft Fabric のグラフの GQL (Graph クエリ言語) 構文のクイック リファレンスです。 詳細な説明については、 GQL 言語ガイドを参照してください。

この記事では、主に ソーシャル ネットワークのグラフ データセットの例を使用します。 また、 Graph チュートリアルの 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

ステートメントの順序:

Important

Microsoft Fabric の 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(並び替え)

結果を並べ替えます。

構文 :

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

Example:

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

Important

要求された行の順序は、直前の 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

ノード パターンの詳細については、「 グラフ パターン」を参照してください。

エッジ パターン

エッジ パターンでは、方向やエッジの種類など、ノード間のリレーションシップを指定します。 グラフ データベースでは、エッジは 2 つのノード間の接続またはリレーションシップを表します。

<-[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

パス パターンの詳細については、「 グラフ パターン」を参照してください。

複数のパターン

複数のパターンを使用して、1 つのクエリで複雑な非線形グラフ構造を照合できます。

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

複数のパターンの詳細については、「 グラフ パターン」を参照してください。

値と値の型

基本型

基本型は、文字列、数値、ブール値、datetime などのプリミティブ データ値です。

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

式と演算子

Comparison

比較演算子は値を比較し、等値、順序付け、または null を確認します。

=, <>, <, <=, >, >=              -- 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 式と関数」を参照してください。

一般的なパターン

このセクションでは、使用できる一般的な 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 の例

これらの例では、 Graph チュートリアルの 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