Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
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:
- Skriv felles GQL-spørringer for naboer, multihop-traversering, delte forbindelser og eksistenskontroller.
- Filtrer og aggreger grafdata for rad- og mønsterfiltrering, gruppering, samlingsaggregater og betinget ruting.
- Skriv grafmønsterspørringer for stimoduser, stisøk, mønsterkomposisjon og valgfri matching.