GQL hızlı başvurusu

Bu makale, Microsoft Fabric'te graf için GQL (Graph Sorgu Dili) söz dizimine yönelik hızlı bir başvurudur. Ayrıntılı açıklamalar için GQL dil kılavuzuna bakın.

Uyarı

Bu makalede öncelikli olarak sosyal ağ örnek graf veri kümesi gerçekleştirilir. Ayrıca grafik öğreticisinden Adventure Works veri kümesini kullanan birkaç örnek de sağlar.

Sorgu yapısı

GQL sorguları, grafikten hangi verilerin alındığını, nasıl işlendiğini ve sonuçların nasıl gösterildiğini tanımlayan bir deyim dizisi kullanır. Her deyimin belirli bir amacı vardır ve birlikte grafikteki verileri eşleştiren ve adım adım dönüştüren doğrusal bir işlem hattı oluştururlar.

Tipik sorgu akışı:
GQL sorgusu genellikle eşleşecek graf desenini belirterek başlar. Ardından değişken oluşturma, filtreleme, sıralama, sayfalandırma ve sonuç çıkışı için isteğe bağlı deyimler kullanır.

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

Deyim sırası:

Önemli

graph henüz rastgele deyim bileşimini desteklemez. Geçerli sınırlamalarla ilgili makaleye bakın.

Deyimler genellikle sorgu içinde herhangi bir sırada görünebilir:

  • MATCH – Bulunacak grafik desenlerini belirtin.
  • LET – İfadelerden değişkenleri tanımlayın.
  • FILTER – Satır eşleştirme koşullarını koruyun.
  • ORDER BY – Sonuçları sıralayın.
  • OFFSET – Birçok satırı atlayın.
  • LIMIT – Satır sayısını kısıtlayın.
  • RETURN – Son sonuçların çıktısını alır.

Her deyim öncekini oluşturur, bu nedenle sorgu çıkışını artımlı olarak daraltır ve şekillendirebilirsiniz. Her deyim hakkında daha fazla bilgi için aşağıdaki bölümlere bakın.

Sorgu ifadeleri

MATCH

Verilerinizde grafik desenlerini bulun.

Syntax:

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

Example:

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

Deyimi hakkında MATCH daha fazla bilgi için bkz. Graph desenleri.

IZİN

İfadeleri kullanarak değişkenler oluşturun.

Syntax:

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

Example:

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

Deyimi hakkında LET daha fazla bilgi için GQL dil kılavuzuna bakın.

FİLTRE

Koşullarla eşleşen satırları tutar.

Syntax:

FILTER [ WHERE ] <predicate>
...

Example:

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

Deyimi hakkında FILTER daha fazla bilgi için GQL dil kılavuzuna bakın.

SIRALAMA

Sonuçları sıralar.

Syntax:

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

Example:

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

Önemli

İstenen satır sırası, yalnızca önceki ORDER BY bir ifadeden hemen sonra sabit kalması garanti edilir. Aşağıdaki ifadelerin (varsa) böyle bir düzeni koruması garanti değildir.

Deyimi hakkında ORDER BY daha fazla bilgi için GQL dil kılavuzuna bakın.

UZAKLIK/LIMIT

Satırları atlayın ve sonuç sayısını sınırlayın.

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

ve OFFSET deyimleri hakkında LIMIT daha fazla bilgi için GQL dil kılavuzuna bakın.

RETURN

Son sonuçların çıkışını elde edin.

Syntax:

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

Example:

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

Deyimi hakkında RETURN daha fazla bilgi için GQL dil kılavuzuna bakın.

Grafik desenleri

Graf desenleri, eşleşecek grafın yapısını açıklar.

Düğüm desenleri

Grafik veritabanlarında düğümleri kullanarak kişiler, ürünler veya yerler gibi varlıkları temsil edin.

Düğüm desenleri, grafikteki düğümleri eşleştirmeyi açıklar. Etikete göre filtreleyebilir veya değişkenleri bağlayabilirsiniz.

(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

Düğüm desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.

Kenar desenleri

Kenar desenleri, yön ve kenar türü dahil olmak üzere düğümler arasındaki ilişkileri belirtir. Graf veritabanlarında kenar, iki düğüm arasındaki bir bağlantıyı veya ilişkiyi temsil eder.

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

Kenar desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.

Etiket ifadeleri

Etiket ifadeleri, mantıksal işleçler kullanarak düğümleri belirli etiket birleşimleriyle eşleştirmenize olanak sağlar.

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

Etiket ifadeleri hakkında daha fazla bilgi için bkz. Grafik desenleri.

Yol desenleri

Yol desenleri, atlama sayıları ve değişken bağlamaları da dahil olmak üzere grafikteki dolaşmaları açıklar.

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

Yol desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.

Birden çok desen

Tek bir sorgudaki karmaşık, doğrusal olmayan grafik yapılarını eşleştirmek için birden çok desen kullanın.

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

Birden çok desen hakkında daha fazla bilgi için bkz. Grafik desenleri.

Değerler ve değer türleri

Temel türler

Temel türler dizeler, sayılar, boole'lar ve tarih zamanları gibi temel veri değerleridir.

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

Temel türler hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.

Başvuru değeri türleri

Başvuru değeri türleri, sorgularda değer olarak kullandığınız düğümler ve kenarlardır.

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

Başvuru değer türleri hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.

Koleksiyon türleri

Koleksiyon türleri, listeler ve yollar gibi birden çok değeri gruplandırıyor.

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

Koleksiyon türleri hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.

Malzeme ve nullable tipler

Her değer türü null atanabilir (null değeri içerir) veya malzemedir (hariç tutar). Açıkça belirtmediğiniz NOT NULLsürece türler varsayılan olarak null atanabilir.

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

İfadeler ve işleçler

Conditional

Koşullu ifadeler koşullara göre farklı değerler döndürür.

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

Koşullu ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Karşılaştırma

Karşılaştırma işleçleri değerleri karşılaştırır ve eşitlik, sıralama veya null değerlerini denetler.

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

Karşılaştırma önkoşulları hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Logical

Mantıksal işleçler sorgularda boole koşullarını birleştirir veya olumsuzleştirir.

AND, OR, NOT, XOR               -- Boolean logic

Mantıksal ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Arithmetic

Aritmetik işleçler sayılar üzerinde hesaplamalar yapar.

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

Aritmetik ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Dize desenleri

Dize deseni önkoşulları dizelerdeki alt dizeler, önekler veya soneklerle eşleşir.

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

Dize deseni önkoşulları hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

İşlemleri listeleme

Listeleme işlemleri test üyeliği, erişim öğeleri ve ölçü listesi uzunluğu.

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

Liste üyeliği önkoşulları hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Özellik erişimi

Özellik erişimi bir düğümden veya kenardan bir özelliğin değerini alır.

n.firstName                      -- Property access

Özellik erişimi hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Functions

Toplama işlevleri

Toplama işlevleri, satır grupları (dikey toplama) veya grup listesinin öğeleri (yatay toplama) için özet değerleri hesaplar.

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 ifadeleri ve işlevlerindeki toplama işlevleri hakkında daha fazla bilgi edinin.

Dize işlevleri

Dize işlevleri, dize değerleriyle çalışmanıza ve çözümlemenize olanak sağlar.

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 ifadeleri ve işlevlerindeki dize işlevleri hakkında daha fazla bilgi edinin.

Liste işlevleri

Liste işlevleri, uzunluğu denetleme veya kırpma boyutu gibi listelerle çalışmanızı sağlar.

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

Liste işlevleri hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Graf işlevleri

Graph işlevleri düğümlerden, yollardan ve kenarlardan bilgi almanıza olanak sağlar.

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

Grafik işlevleri hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Zamana bağlı işlevler

Zamana bağlı işlevler, tarih ve saat değerleriyle çalışmanızı sağlar.

zoned_datetime()               -- Get the current timestamp

Zamana bağlı işlevler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Genel işlevler

Genel işlevler, verilerle ortak yollarla çalışmanızı sağlar.

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

Genel işlevler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.

Ortak desenler

Bu bölümde kullanabileceğiniz bazı yaygın GQL sorgu desenleri gösterilmektedir.

Sosyal ağ örnekleri

Bu örneklerde sosyal ağ örnek graf veri kümesi kullanılır.

Bir türün tüm düğümlerini bulma

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

Belirli özelliklere sahip düğümleri bulma

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

Bağlantıları bulma

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

çapraz geçiş ilişkileri

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

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

Üst 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

Filtreleme ve koşullar

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

Yol geçişi

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

Adventure Works örnekleri

Bu örneklerde grafik öğreticisinden Adventure Works veri kümesi kullanılır.

Tüm müşterileri bul

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

Ürünleri ada göre bulma

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

Müşteri siparişlerini dolaşma

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

Siparişleri çalışana göre sayma

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