GQL hurtigreferanse

Denne artikkelen er en hurtigreferanse for GQL-syntaksen (Graph Query Language) for graf i Microsoft Fabric. Bruk den til å huske syntaks og standardinnstillinger. For en helhetlig forklaring, se GQL-språkguiden; hver seksjon lenker til den fokuserte referansen som eier alle detaljene.

Note

Denne artikkelen bruker primært det sosiale nettverkseksempelet graph dataset. Den inneholder også noen eksempler som bruker Adventure Works-datasettet fra grafopplæringen.

Spørringsstruktur

GQL-spørringer bruker en sekvens med setninger som definerer hvilke data som skal hentes fra grafen, hvordan du behandler dem og hvordan du viser resultatene. Hver setning har et bestemt formål, og sammen oppretter de en lineær datasamlebånd som samsvarer med data fra grafen og transformerer den trinnvis.

Vanlig spørringsflyt:
En GQL-spørring starter vanligvis ved å angi diagrammønsteret som skal samsvare. Deretter bruker den valgfrie setninger for variabel oppretting, filtrering, sortering, paginering og resultatutdata.

Eksempel:

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

Uttalelse:

Viktig!

Setninger danner en ordnet pipeline og kan ikke omorganiseres vilkårlig. Se artikkelen om gjeldende begrensninger.

  • MATCH – Angi diagrammønstre du vil finne.
  • LET – Definer variabler fra uttrykk.
  • FOR – Utvid en liste til rader.
  • CALL – Kjør en inline underspørring og legg til de returnerte kolonnene.
  • FILTER – Behold samsvarende betingelser for rader.
  • WHEN – Ruder hver inngangsrad til den første matchende betingede grenen.
  • ORDER BY – Sorter resultater.
  • OFFSET – Hopp over mange rader.
  • LIMIT – Begrens antall rader.
  • RETURN – Utdata de endelige resultatene.
  • NEXT – Start en ny spørringsfase ved å bruke kolonnene returnert av forrige trinn.

Hver setning bygger på den forrige, slik at du trinnvis finjusterer og former spørringsutdataene. Bruk UNION, UNION DISTINCT, eller UNION ALL for å kombinere komplette spørringsblokker. Hvis du vil ha mer informasjon om hver setning, kan du se avsnittene nedenfor.

Spørring setninger

FYRSTIKK

Finn grafmønstre i dataene.

Syntaks:

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

Eksempel:

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

Hvis du vil ha mer informasjon om setningen MATCH , kan du se graph-mønstrene.

LA

Opprett variabler ved hjelp av uttrykk.

Syntaks:

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

Eksempel:

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

Hvis du vil ha mer informasjon om setningen LET , kan du se GQL-språkveiledningen.

FOR

Utvider en liste til rader og returnerer valgfritt hvert elements posisjon.

Syntaks:

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

Eksempel:

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

WITH OFFSET starter på 0. WITH ORDINALITY starter på 1.

Hvis du vil ha mer informasjon om setningen FOR , kan du se GQL-språkveiledningen.

ANROP

Kjører en inline underspørring for hver inndatarad. Variabler som allerede er innenfor omfanget er implisitt tilgjengelige inne i delspørringen.

Syntaks:

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

Av variablene som opprettes inne i underspørringen, er det kun kolonner fra dens endelige RETURN setning som blir tilgjengelige utenfor den. Ordinary CALL fjerner en ytre rad når underspørringen returnerer ingen rader, og multipliserer den når underspørringen returnerer flere rader. OPTIONAL CALL bevarer en ytre rad med NULL underspørringskolonner når delspørringen returnerer ingen rader.

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

For mer informasjon om inline-underforespørsler, se GQL-språkguiden.

FILTER

Beholder rader som samsvarer med betingelsene.

Syntaks:

FILTER [ WHERE ] <predicate>
...

Eksempel:

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

Hvis du vil ha mer informasjon om setningen FILTER , kan du se GQL-språkveiledningen.

BESTILL INNEN

Sorterer resultatene.

Syntaks:

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

Eksempel:

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

Nullplassering er uavhengig av sorteringsretning. Standard er NULLS LAST for både ASC og DESC; spesifiser NULLS FIRST å plassere nullverdier før ikke-nullverdier.

Viktig!

Den forespurte rekkefølgen på rader er kun garantert å holde umiddelbart etter en foregående ORDER BY setning. Eventuelle følgende setninger (hvis de finnes) er ikke garantert å bevare en slik rekkefølge.

Hvis du vil ha mer informasjon om setningen ORDER BY , kan du se GQL-språkveiledningen.

FORSKYVNING/GRENSE

Hopp over rader og begrens antall resultater.

Syntaks:

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

Eksempel:

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

Hvis du vil ha mer informasjon om OFFSET og LIMIT setninger, kan du se GQL-språkveiledningen.

RETUR

Utdata de endelige resultatene.

Syntaks:

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

Eksempel:

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

Hvis du vil ha mer informasjon om setningen RETURN , kan du se GQL-språkveiledningen.

NEXT

Starter en ny spørringsfase. Kun kolonner returnert av det foregående stadiet er tilgjengelige etter NEXT.

Syntaks:

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

Eksempel:

RETURN 1 AS value
NEXT
RETURN value + 1 AS nextValue

Begge trinn kan inneholde en union av spørringsblokker. Unionen evalueres innenfor dette stadiet før utgangen krysser grensen NEXT .

For mer informasjon om NEXT, se GQL-språkguiden.

Betingelsessetninger

Ruter hver inngangsrad til den første WHEN grenen hvis predikat evaluerer til TRUE.

Syntaks:

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

Predikater må være boolske og evalueres i rekkefølge. FALSE og UNKNOWN falle gjennom til neste gren. Hvis ingen gren matcher og det ikke finnes noen ELSE, utelates inngangsraden. Predikater etter første match og uvalgte grenlegemer blir ikke evaluert.

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

Alle grener må returnere de samme kolonnenavnene med kompatible datatyper. Omslutt en gren med regulering når den inneholder en nestet prosedyre.

For mer informasjon, se Betingede setninger.

UNION

Kombinerer utdataene fra komplette spørringsblokker.

Syntaks:

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

Bare UNION og UNION DISTINCT fjern duplikatrader. UNION ALL bevarer duplikatrader. Hver spørringsblokk må returnere det samme settet med kolonnenavn med kompatible datatyper.

For mer informasjon om fagforeninger, se GQL-språkguiden.

Grafmønstre

Grafmønstre beskriver strukturen i grafen som samsvarer.

Nodemønstre

Bruk noder i grafdatabaser til å representere enheter, for eksempel personer, produkter eller steder.

Nodemønstre beskriver hvordan man samsvarer med noder i grafen. Du kan filtrere etter etikett eller binde variabler.

(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

Hvis du vil ha mer informasjon om nodemønstre, kan du se grafmønstrene.

Edge-mønstre

Edge-mønstre angir relasjoner mellom noder, inkludert retning og kanttype. I grafdatabaser representerer en kant en tilkobling eller relasjon mellom to noder.

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

Hvis du vil ha mer informasjon om kantmønstre, kan du se grafmønstrene.

Etikettuttrykk

Med etikettuttrykk kan du sammenligne noder med bestemte etikettkombinasjoner ved hjelp av logiske operatorer.

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

Hvis du vil ha mer informasjon om etikettuttrykk, kan du se Graph-mønstrene.

Banemønstre

Banemønstre beskriver traverser gjennom grafen, inkludert hoppantall og variable bindinger.

(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 er standard stimodus og tillater gjentatte noder og kanter. TRAIL forhindrer gjentatte kanter. SIMPLE forhindrer gjentatte noder unntatt en lukkende første-til-siste syklus, og ACYCLIC forhindrer alle gjentatte noder. Begge node-unike moduser forhindrer også gjentatte kanter fordi gjenbruk av kanter vil gjenta endepunktsnoder. ALL er standard stisøk. ANY SHORTEST returnerer én korteste vei for hvert kilde-destinasjonspar og velger ikke deterministisk blant bundne stier.

Støttede kvantifikatorer inkluderer faste {n}, begrensede {m,n} og {,n}, og ubundne {m,}, *, og +. Ubegrensede ALL WALK mønstre støttes ikke; bruk en avsluttende sti-modus. Unbounded ANY SHORTEST WALK har ytterligere form- og stiverdibegrensninger. For detaljer, se GQL-grafmønstre.

Hvis du vil ha mer informasjon om banemønstre, kan du se grafmønstrene.

Flere mønstre

Bruk flere mønstre til å samsvare komplekse, ikke-lineære grafstrukturer i én enkelt spørring.

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

Hvis du vil ha mer informasjon om flere mønstre, kan du se Graph-mønstrene.

Verdier og verdityper

Grunnleggende typer

Grunnleggende typer er primitive dataverdier som strenger, tall, boolske verdier og datetimes.

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

Eller D suffikset d danner et omtrentlig FLOAT64 literal. En eksponent uten suffiks skaper også en FLOAT64 verdi. Og F bokstavelige f suffikser støttes ikke for øyeblikket.

Hvis du vil ha mer informasjon om grunnleggende typer, kan du se GQL-verdier og verdityper.

Referanseverdityper

Referanseverdityper er noder og kanter som du bruker som verdier i spørringer.

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

Hvis du vil ha mer informasjon om referanseverdityper, kan du se GQL-verdier og verdityper.

Samlingstyper

Samlingstyper grupperer flere verdier, for eksempel lister og baner.

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

Hvis du vil ha mer informasjon om samlingstyper, kan du se GQL-verdier og verdityper.

Materielle og nullbare typer

Hver verditype kan enten nullstilles (inkluderer nullverdien) eller materialet (utelukker den). Som standard kan typer nullstilles med mindre du eksplisitt angir NOT NULL.

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

Uttrykk og operatorer

Betinget

Enkle CASE uttrykk sammenligner ett uttrykk med én eller flere verdier.

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

Søkte CASE WHEN <predicate> uttrykk støttes ikke. Bruk en betinget setning for å rute rader basert på predikater.

Hvis du vil ha mer informasjon om betingede uttrykk, kan du se GQL-uttrykkene og -funksjonene.

Sammenligning

Sammenligningsoperatorer sammenligner verdier og ser etter likhet, rekkefølge eller nullverdier.

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

Hvis du vil ha mer informasjon om sammenligningspredikater, kan du se GQL-uttrykkene og -funksjonene.

Logisk

Logiske operatorer kombinerer eller opphever boolske betingelser i spørringer.

AND, OR, NOT, XOR               -- Boolean logic

Hvis du vil ha mer informasjon om logiske uttrykk, kan du se GQL-uttrykkene og -funksjonene.

EXISTERER

Tester om en prosedyreform-delspørring returnerer minst én rad.

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

EXISTS gir en ikke-null boolsk verdi. Bruk NOT EXISTS for å teste at underspørringen ikke returnerer noen rader. Du kan bruke resultatet i WHERE eller FILTER, LET, , RETURN, ORDER BYog aggregere filter- eller kildeuttrykk. EXISTS støttes ikke i et listepredikatfilter.

Viktig!

Grafmønstre-only former som EXISTS { (p)-[:knows]->(friend) } og EXISTS ((p)-[:knows]->(friend)) støttes ikke. Bruk prosedyreskjemaet som MATCH vises i det foregående eksempelet.

Forsiktig!

Et ugruppert aggregat som RETURN count(*) gir én rad selv når ingen mønster stemmer. Fordi EXISTS tester for rader, evaluerer den formen til TRUE.

For mer informasjon om EXISTS, se Eksistens-underforespørsler.

Aritmetikk

Aritmetiske operatorer utfører beregninger på tall.

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

Hvis du vil ha mer informasjon om aritmetiske uttrykk, kan du se GQL-uttrykkene og -funksjonene.

Strengmønstre

Strengmønsterpredikater samsvarer med delstrenger, prefikser eller suffikser i strenger.

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

Hvis du vil ha mer informasjon om strengmønsterpredikater, kan du se GQL-uttrykkene og -funksjonene.

Listeoperasjoner

Test medlemskap for listeoperasjoner, tilgangselementer og mållistelengde.

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

Listepredikatfunksjoner returnerer TRUE, FALSE, eller UNKNOWN ifølge filterresultatene. For en tom liste, ALL og NONE returner TRUE, mens ANY og SINGLE returnerer FALSE. En null-kildeliste returnerer UNKNOWN.

Elementbindingen er lokal for filteret og kan skygge en ytre variabel. Aggregater over den lokale bindingen og EXISTS underforespørsler inne i filteret støttes ikke.

For mer informasjon, se Liste predikatfunksjoner.

Egenskapstilgang

Egenskapstilgang henter verdien for en egenskap fra en node eller kant.

n.firstName                      -- Property access

Hvis du vil ha mer informasjon om egenskapstilgang, kan du se GQL-uttrykkene og -funksjonene.

Functions

Bruk innebygde funksjoner for å transformere verdier, inspisere grafelementer og aggregere rader.

Numeriske funksjoner

Numeriske funksjoner beregner numeriske verdier eller produserer heltallsintervaller.

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

Andre støttede trigonometriske funksjoner er TAN, COT, , ATAN, SINH, COSH, og TANH. Bortsett fra og ABSRANGE, returnerer DOUBLEdisse numeriske funksjonene .

Lær mer om numeriske funksjoner i GQL-uttrykk og funksjoner.

Mengdefunksjoner

Sammendragsverdier for mengdefunksjoner beregner sammendragsverdier for grupper med rader (loddrett aggregasjon) eller over elementene i en gruppeliste (vannrett aggregasjon).

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

Uten å gruppere kolonner returnerer 0 en aggregert spørring uten inngangsrader for COUNT, en tom liste for COLLECT_LIST og COLLECT_ELEMENTS, og null for SUM, AVG, MIN, MAX, og COLLECT_ONE. Et gruppelisteargument gjør aggregasjonen horisontal.

Lær mer om mengdefunksjoner i GQL-uttrykkene og -funksjonene.

Streng-funksjoner

Strengfunksjoner lar deg arbeide med og analysere strengverdier.

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-mønstre, erstatninger og alternativer må være bokstavelige. For signaturer, flagg og nulloppførsel, se Strengfunksjoner.

Listefunksjoner

Med listefunksjoner kan du arbeide med lister, for eksempel kontroll av lengde eller trimmingsstørrelse.

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

Hvis du vil ha mer informasjon om listefunksjoner, kan du se GQL-uttrykk og -funksjoner.

Graf-funksjoner

Med graffunksjoner kan du få informasjon fra noder, baner og kanter.

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

Hvis du vil ha mer informasjon om graffunksjoner, kan du se GQL-uttrykk og -funksjoner.

Temporale funksjoner

Med tidsmessige funksjoner kan du arbeide med dato- og klokkeslettverdier.

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

Hvis du vil ha mer informasjon om tidsmessige funksjoner, kan du se GQL-uttrykk og -funksjoner.

Generiske funksjoner

Med generiske funksjoner kan du arbeide med data på vanlige måter.

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

Hvis du vil ha mer informasjon om generiske funksjoner, kan du se GQL-uttrykk og -funksjoner.

Oppgaveorienterte eksempler

Bruk instruksjonsartiklene når du trenger komplette, klare søkemønstre: