GQL-uttrykk, predikater og funksjoner

Denne artikkelen inneholder en omfattende referanse for GQL-uttrykk, predikater og innebygde funksjoner som er tilgjengelige i grafen i Microsoft Fabric-spørringer. Bruk denne referansen til å forstå hvordan du utfører beregninger, filtrerer resultater og transformerer data i grafspørringene.

Hvis du vil ha en oversikt over GQL-spørringsspråket og eksempler på ende-til-ende-spørring, kan du se GQL-språkveiledning. Hvis du vil ha informasjon om støttede datatyper og litteralsyntaks, kan du se GQL-verdier og verdityper.

Litteraler

Litteraler er enkle uttrykk som direkte evalueres til den angitte verdien. Artikkelen om GQL-verdier og verdityper forklarer litteraler av hver type verdi i detalj.

Eksempel:

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Hvis du vil ha detaljert litteralsyntaks for hver datatype, kan du se GQL-verdier og verdityper.

Predikater

Predikater er boolske uttrykk som du vanligvis bruker til å filtrere resultater i GQL-spørringer. De evalueres til TRUE, FALSEeller UNKNOWN (null).

Forsiktig!

Når du bruker predikater som filter, beholder de bare de elementene som predikatet evaluerer til TRUE.

Sammenligningspredikater

Bruk disse operatorene til å sammenligne verdier:

  • = (lik)
  • <> (ikke lik)
  • < (mindre enn)
  • > (større enn)
  • <= (mindre enn eller lik)
  • >= (større enn eller lik)

GQL bruker treverdilogikk der sammenligninger med nullretur UNKNOWN:

Uttrykk Resultat
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Hvis du vil ha spesifikk sammenligningsvirkemåte, kan du se dokumentasjonen for hver verditype i GQL-verdier og verdityper.

Eksempel:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Antall tvangsregler:

Bruk følgende regler i rekkefølgen av prioritet:

  1. Sammenligningsuttrykk som involverer argumenter for omtrentlige numeriske typer, tvinger alle argumenter til å være av en omtrentlig numerisk type.
  2. Sammenligningsuttrykk som involverer argumenter for både signerte og usignerte heltallstyper, tvinger alle argumenter til å være av en signert heltallstype.

Logiske uttrykk

Kombinere betingelser med logiske operatorer:

  • AND (begge betingelsene er sanne)
  • OR (begge betingelsene er sanne)
  • NOT (opphever betingelse)
  • XOR (eksklusiv disjunction – sann når nøyaktig én operand er sann)

Eksempel:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Predikater for egenskapseksistens

Hvis du vil kontrollere om det finnes egenskaper, bruker du disse predikatene:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Note

Forsøk på å få tilgang til en kjent ikke-eksisterende egenskap resulterer i en syntaksfeil. Tilgang til en potensielt ikke-eksisterende eiendom vurderer til null. Fastsettelsen av om en egenskap er kjent eller potensielt ikke-eksisterende, er basert på typen node eller kant som er tilgjengelig.

Predikater for listemedlemskap

Test om verdiene er i lister:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

Strengmønsterpredikater

Sammenligne strenger ved hjelp av teknikker for mønstersamsvar:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

Aritmetiske uttrykk

Bruk standard aritmetiske operatorer med numeriske verdier:

  • + (tillegg)
  • - (subtraksjon)
  • * (multiplikasjon)
  • / (divisjon)

Aritmetiske operatorer følger generelle matematiske konvensjoner.

Forrang:

Operatorer følger vanligvis etablerte regler for operatorprioritet, for eksempel * før +. Bruk parenteser til å kontrollere evalueringsrekkefølgen etter behov.

Eksempel:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Tvangsregler:

Bruk følgende regler i rekkefølgen av prioritet:

  1. Aritmetiske uttrykk som involverer argumenter for omtrentlige talltyper, returnerer et resultat av en omtrentlig numerisk type.
  2. Aritmetiske uttrykk som involverer argumenter for både signerte og ikke-signerte heltallstyper, returnerer et resultat av en signert heltallstype.

Eksempel:

LET birth_year = p.birthday / 10000
RETURN birth_year

Egenskapstilgang

Access-egenskaper ved hjelp av punkt notasjon:

p.firstName
edge.creationDate

Listetilgang

Tilgangslisteelementer ved hjelp av nullbasert indeksering:

interests[0]    -- first element
interests[1]    -- second element

Innebygde funksjoner

GQL støtter ulike innebygde funksjoner for databehandling og analyse.

Mengdefunksjoner

Bruk mengdefunksjoner til å evaluere et uttrykk over et sett med rader og få en endelig resultatverdi ved å kombinere verdiene som beregnes for hver rad. Graph støtter følgende mengdefunksjoner:

  • count(*) - teller rader
  • sum(expression) – summerer numeriske verdier
  • avg(expression) – gjennomsnitt av numeriske verdier
  • min(expression) – finner minimumsverdi
  • max(expression) – finner maksimumsverdi
  • collect_list(expression) – samler inn verdier i en liste

Generelt ignorerer mengdefunksjoner nullverdier og returnerer alltid en nullverdi når ingen materialinndataverdier er angitt. Du kan bruke coalesce til å få en annen standardverdi: coalesce(sum(expr), 0). Det eneste unntaket count er mengdefunksjonen, som alltid teller verdiene som ikke er null, og returnerer 0 hvis det ikke finnes noen. Brukes count(*) til å inkludere nullverdier i tellingen.

Bruk mengdefunksjoner på tre forskjellige måter:

  • Beregne (loddrette) aggregater over hele tabeller
  • Slik beregner du (loddrette) aggregater over deltabeller som bestemmes av en grupperingsnøkkel
  • Beregne (vannrette) aggregater over elementene i en gruppeliste

Loddrette aggregater:

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

Vannrette aggregater:

Vannrett aggregasjon beregner aggregater over elementene i gruppelistevariabler fra mønstre med variabel lengde:

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

Vannrett aggregasjon har alltid prioritet over loddrett aggregasjon. Hvis du vil konvertere en gruppeliste til en vanlig liste, bruker collect_list(edges)du .

Note

Hvis du vil ha omfattende dekning av aggregasjonsteknikker, inkludert binding med variabel lengde og kombinasjon av vannrett/vertikal aggregasjon, kan du se Avanserte aggregasjonsteknikker.

Betingede uttrykk

Bruk betingede uttrykk til å returnere forskjellige verdier basert på betingelser.

Søk etter SAK:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Enkel SAK:

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

NULLHVIS:

NULLIF(a, b) returnerer NULL hvis a er lik b, ellers returneres a.

Eksempel:

MATCH (p:Person)
RETURN p.firstName,
       CASE
         WHEN p.gender = 'male' THEN 'M'
         WHEN p.gender = 'female' THEN 'F'
         ELSE 'Other'
       END AS gender_code,
       NULLIF(p.browserUsed, 'Unknown') AS browser

Streng-funksjoner

  • char_length(string) - returnerer strenglengde.
  • upper(string)– returnerer stor variant av angitt streng (bare US ASCII).
  • lower(string)– returnerer små bokstaver variant av angitt streng (bare US ASCII).
  • trim(string) – fjerner innledende og etterfølgende mellomrom.
  • string_join(list, separator) – kobler sammen listeelementer med skilletegn.

Eksempel:

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

Graf-funksjoner

  • nodes(path) – returnerer noder fra en baneverdi.
  • edges(path) – returnerer kanter fra en baneverdi.
  • elements(path) – returnerer alle noder og kanter fra en bane som én enkelt liste, i banerekkefølge.
  • labels(node_or_edge) – returnerer etikettene for en node eller kant som en liste over strenger.
  • path_length(path) – returnerer antallet kanter i en bane.

Eksempel:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops

Listefunksjoner

  • size(list) – returnerer størrelsen på en listeverdi.
  • trim(list,n) - trimme en liste for å være i mest mulig størrelse n.

Eksempel:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

Temporale funksjoner

  • zoned_datetime() – returnerer gjeldende sonedato.
  • zoned_datetime("2025-09-12T10:10:52Z") – returnerer den sonede datetime gitt av argumentet i ISO 8601-format.

Eksempel:

RETURN zoned_datetime() AS now

Generiske funksjoner

  • coalesce(value1, value2, ...) – returnerer den første verdien som ikke er null.
  • to_json_string(value) – konverterer en verdi til JSON-strengrepresentasjonen.

Eksempel:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
       to_json_string(p) AS person_json