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. Bunu sözdizimi ve varsayılan hatları hatırlamak için kullanın. Uçtan uca açıklama için GQL dil rehberine bakınız; her bölüm, tüm detaylara sahip odaklanmış referansa bağlantı verir.

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

Açıklama bileşimi:

Önemli

Ifadeler sıralı bir boru hattı oluşturur ve keyfi olarak yeniden düzenlenemez. Geçerli sınırlamalarla ilgili makaleye bakın.

  • MATCH – Bulunacak grafik desenlerini belirtin.
  • LET – İfadelerden değişkenleri tanımlayın.
  • FOR – Bir listeyi satırlara genişletin.
  • CALL – Bir satır içi alt sorgu çalıştırın ve döndürülen sütunlarını ekleyin.
  • FILTER – Satır eşleştirme koşullarını koruyun.
  • WHEN – Her giriş satırını ilk eşleşen koşullu dala yönlendirin.
  • 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.
  • NEXT – Önceki aşamanın dönen sütunlarını kullanarak başka bir sorgulama aşaması başlatın.

Her deyim öncekini oluşturur, bu nedenle sorgu çıkışını artımlı olarak daraltır ve şekillendirebilirsiniz. Tam sorgu bloklarını birleştirmek için , UNION DISTINCT, veya UNION ALL kullanınUNION. 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.

FOR

Bir listeyi satırlara genişletir ve isteğe bağlı olarak her elemanın konumunu geri getirir.

Syntax:

FOR <variable> IN <list_expression>
  [ WITH OFFSET <offset_variable> | WITH ORDINALITY <ordinality_variable> ]
...

Example:

FOR value IN [10, 20] WITH OFFSET index
RETURN value, index

WITH OFFSETBaşlar.0 WITH ORDINALITYBaşlar.1

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

CALL

Her giriş satırı için bir alt sorgu çalıştırır. Zaten kapsamda olan değişkenler, alt sorgu içinde örtük olarak erişilebilirdir.

Syntax:

[ OPTIONAL ] CALL {
  <query statements>
  RETURN <columns>
}
...

Alt sorgu içinde oluşturulan değişkenler arasında, yalnızca son RETURN iyiminden sütunlar dışarıda kullanılabilir hale gelir. Normal, CALL alt sorgu satır döndürmediğinde dış satırı düşürür ve alt sorgu birden fazla satır döndürdüğünde çarpar. OPTIONAL CALL alt sorgu satır döndürmediğinde, alt sorgu sütunlarıyla dış NULL satırı korur.

MATCH (p:Person)
CALL {
  MATCH (p)-[:knows]->(friend:Person)
  RETURN count(*) AS friendCount
}
RETURN p.firstName, friendCount

Hat içi alt sorgular hakkında daha fazla bilgi için GQL dil rehberine bakınız.

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 ] [ NULLS FIRST | NULLS LAST ], ...
...

Example:

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

Null yerleştirme sıralama yönünden bağımsızdır. Varsayılan NULLS LAST her ikisi ASC için ve DESC; null olmayan değerlerin önüne null değerler koymak için belirtilir NULLS FIRST .

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

NEXT

Başka bir sorgulama aşaması başlar. Yalnızca önceki aşamadan geri dönen sütunlar sonrasında NEXTmevcuttur.

Syntax:

<query stage>
RETURN <columns>
NEXT
<query stage>

Example:

RETURN 1 AS value
NEXT
RETURN value + 1 AS nextValue

Her iki aşamada da sorgu bloklarının birleşimi olabilir. Birlik, çıktısı sınırı geçmeden NEXT önce o aşamada değerlendirilir.

Daha fazla bilgi NEXTiçin GQL dil rehberine bakınız.

Koşullu deyimler

Her giriş satırını, önlemi değerleyen TRUEilk WHEN dala yönlendirir.

Syntax:

WHEN <predicate> THEN <linear query statement or { query statements }>
[ WHEN <predicate> THEN <linear query statement or { query statements }> ... ]
[ ELSE <linear query statement or { query statements }> ]

Yüklemler Boolean olmalı ve sırayla değerlendirilmelidir. FALSE ve UNKNOWN bir sonraki dala geçiyor. Eğer hiçbir dal eşleşmezse ve yoksa ELSE, giriş satırı atlanır. İlk eşleşmeden sonraki predikatlar ve seçilmemiş dal gövdeleri değerlendirilmiyor.

RETURN 'Alice' AS name, 19900101u AS birthday
NEXT
WHEN birthday < 20000101u THEN
  RETURN name, 'Before 2000' AS era
ELSE
  RETURN name, '2000 or later' AS era

Tüm dallar, uyumlu veri tipleriyle aynı sütun adlarını döndürmelidir. İç içe bir prosedür içeren bir dal, diş teli ile kapatın.

Daha fazla bilgi için Koşullu ifadeler sayfasına bakınız.

UNION

Tam sorgu bloklarının çıktısını birleştirir.

Syntax:

<query block>
UNION [ DISTINCT | ALL ]
<query block>

Kopya UNION sıraları çıkar ve UNION DISTINCT çıkar. UNION ALL Çift satırları korur. Her sorgu bloğu, uyumlu veri tipleriyle aynı sütun isimleri setini döndürmelidir.

Sendikalar hakkında daha fazla bilgi için GQL dil rehberine bakınız.

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]->()                   -- Bind a path variable
MATCH REPEATABLE ELEMENTS (a)->(b)  -- Explicit default match mode
MATCH DIFFERENT EDGES (a)->(b), (a)->(c)
MATCH ALL TRAIL (a)->{1,4}(b)       -- Every edge-unique path
MATCH p = ANY SHORTEST (a)->{1,4}(b) -- One shortest path per endpoint pair

WALK varsayılan yol modudur ve tekrar edilen düğümler ile kenarlara izin verir. TRAIL tekrarlayan kenarları önler. SIMPLE kapanan ilk sona dönen döngü dışında tekrarlanan düğümleri engeller ve ACYCLIC tüm tekrarlanan düğümleri engeller. Her iki düğüm benzeri modu da tekrar eden kenarları engeller çünkü kenar yeniden kullanımı uç nokta düğümlerini tekrarlar. ALL varsayılan yol aramasıdır. ANY SHORTEST her kaynak-hedef çifti için en kısa bir yolu döndürür ve bağlı yollar arasında deterministik olarak seçim yapmaz.

Desteklenen nicelikleyiciler arasında sabit {n}, sınırlı {m,n} ve {,n}, ve sınırsız {m,}, *, ve +bulunur. Sınırsız ALL WALK desenler desteklenmez; sonlandırma yolu modu kullanın. Unbounded ANY SHORTEST WALK ek şekil ve yol değeri kısıtlamalarına sahiptir. Detaylar için bakınız: GQL grafik desenleri.

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, -17d
BOOL             -- TRUE, FALSE, UNKNOWN
ZONED DATETIME   -- ZONED_DATETIME('2023-01-15T10:30:00Z')

Or dD eki yaklaşık FLOAT64 bir literal oluşturur. Eksiz bir üstsel de bir FLOAT64 değer oluşturur. f Ve F kelimesi kelimesi ekleri şu anda desteklenmiyor.

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

Basit CASE ifadeler bir ifadeyi bir veya daha fazla değerle karşılaştırır.

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

Aranan CASE WHEN <predicate> ifadeler desteklenmiyor. Başlatmalara dayalı satırları yönlendirmek için koşullu bir ifade kullanın.

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.

EXISTS

Bir prosedür formu alt sorgusunun en az bir satır döndürüp dönmediğini test eder.

EXISTS {
  MATCH (p)-[:knows]->(friend:Person)
  RETURN friend
}

EXISTS sıfır olmayan bir Boolean değeri döndürür. Alt sorgu satır döndürmediğini test etmek için kullanılır NOT EXISTS . Sonucu veya WHEREFILTER, LET, , RETURNORDER BY, , ve filtre veya kaynak ifadeleri toplaması için kullanabilirsin. EXISTS List predicate filtresi içinde desteklenmez.

Önemli

Sadece grafik desenine dayalı formlar ( EXISTS { (p)-[:knows]->(friend) } örneğin ve EXISTS ((p)-[:knows]->(friend)) desteklenmez). Önceki örnekte gösterilen prosedür formunu MATCH kullanın.

Caution

Gruplanmamış bir toplam, RETURN count(*) örneğin hiçbir desen eşleşmese bile bir satır geri getirir. Çünkü EXISTS satırlar için testler yapılır, bu form 'ye değer TRUEverir.

Daha fazla bilgi EXISTSiçin bkz. Varoluş alt sorguları.

Arithmetic

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

+, -, *, /                       -- Basic arithmetic operations
1.00m / 8.00m                    -- Exact result: 0.1250m

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
MSFT.REGEXP_LIKE(n.firstName, '^jo', 'i') -- RE2 regular expression

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
ALL(x IN n.tags WHERE x <> '')   -- Every element matches
ANY(x IN n.tags WHERE x = 'gql') -- At least one element matches
NONE(x IN n.tags WHERE x = '')   -- No element matches
SINGLE(x IN n.tags WHERE x = 'gql') -- Exactly one element matches

List predicate fonksiyonları filtre sonuçlarına göre , FALSE, veya UNKNOWN döndürürTRUE. Boş bir liste ALL için, ve NONE return TRUE, while ANY ve SINGLE return FALSE. Null bir kaynak listesi döndürür UNKNOWN.

Eleman bağlanması filtreye lokeldir ve dış değişkeni gölgeleyebilir. O yerel bağlama üzerindeki agregalar ve EXISTS filtre içindeki alt sorgular desteklenmez.

Daha fazla bilgi için bkz. Yüklem fonksiyonlarını listele.

Ö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

Değerleri dönüştürmek, grafik elemanlarını incelemek ve satırları toplamak için yerleşik fonksiyonları kullanın.

Sayısal işlevler

Sayısal fonksiyonlar sayısal değerleri hesaplar veya tam sayı aralıkları üretir.

abs(value)                       -- Absolute value; preserves the numeric type
power(base, exponent)            -- Exponentiation; returns DOUBLE
sin(radians), cos(radians)       -- Trigonometric functions
asin(value), acos(value)         -- Inverse functions; value must be in [-1, 1]
degrees(radians)                 -- Convert radians to degrees
radians(degrees)                 -- Convert degrees to radians
range(start, end)                -- Integer range with step 1
range(start, end, step)          -- Integer range with a nonzero step

Desteklenen diğer trigonometrik fonksiyonlar TAN, COT, ATAN, SINH, COSH, ve TANH. ve RANGEhariç, bu sayısal fonksiyonlar ABS döndürürDOUBLE.

GQL ifadeleri ve fonksiyonlarındaki sayısal fonksiyonlar hakkında daha fazla bilgi edinin.

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 inputs, including nulls
collect_one(p.firstName)         -- Select one non-null value
collect_elements(p.roles)        -- Concatenate list-valued inputs
count(DISTINCT expr)             -- Remove duplicate expression values
count(*) FILTER (WHERE predicate LIMIT 10) -- Filter and limit this aggregate

Sütunlar gruplanmadan, giriş satırları olmayan bir toplu sorgu 0 için COUNTboş bir liste döner, COLLECT_ELEMENTSve COLLECT_LIST , AVGMINMAX, , , ve COLLECT_ONEiçin SUMnull döner. Bir grup-liste argümanı, toplamı yatay yapar.

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)               -- Unicode case mapping
casefold(s)                      -- Unicode caseless form
normalize(s)                     -- Normalize a string to NFC
normalize(s, NFD)                -- Normalize a string to NFD
trim(s)                          -- Trim spaces
trim(leading '_' from s)         -- Trim one custom byte
string_join(list)                -- Join with ", "
string_join(list, delimiter)     -- Join with a custom delimiter
MSFT.REGEXP_COUNT(s, pattern)    -- Count RE2 matches
MSFT.REGEXP_INSTR(s, pattern)    -- Find a zero-based match position
MSFT.REGEXP_SUBSTR(s, pattern)   -- Return matching text
MSFT.REGEXP_REPLACE(s, pattern, replacement) -- Replace matches

Regex kalıpları, değişimler ve seçenekler kelimenin tam anlamıyla olmalıdır. İmzalar, bayraklar ve null davranış için bkz. Dizim fonksiyonları.

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 at most n elements

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
element_id(node_or_edge)         -- Get an opaque element identifier
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.

CURRENT_TIMESTAMP                -- Get the current zoned datetime
ZONED_DATETIME(string)           -- Parse an ISO 8601 zoned datetime
DURATION(string)                 -- Parse an ISO 8601 day-time duration

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.

Görev odaklı örnekler

Eksik, uyarlanabilir sorgu kalıplarına ihtiyacınız olduğunda nasıl yapılır makalelerini kullanın: