Del via


GQL-udtryk, prædikater og funktioner

Notat

Denne funktion er i øjeblikket tilgængelig som offentlig prøveversion. Denne prøveversion leveres uden en serviceniveauaftale og anbefales ikke til produktionsarbejdsbelastninger. Visse funktioner understøttes muligvis ikke eller kan have begrænsede funktioner. Du kan finde flere oplysninger under Supplerende vilkår for anvendelse af Microsoft Azure Previews.

Med GQL-udtryk kan du udføre beregninger, sammenligninger og transformationer på data i dine forespørgsler. I kombination med indbyggede funktioner indeholder udtryk effektive værktøjer til databehandling, filtrering og analyse i grafforespørgsler.

Konstanter

Konstanter er simple udtryk, der direkte evalueres til den angivne værdi. Konstanter for hver type værdi forklares detaljeret i GQL-værdier og værdityper.

Eksempel:

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

Du kan finde detaljerede konstantsyntaks for hver datatype under GQL-værdier og værdityper.

Prædikater

Prædikater er booleske udtryk, som ofte bruges til at filtrere resultater i GQL-forespørgsler. De evalueres til TRUE, FALSEeller UNKNOWN (null).

Advarsel

Når prædikater bruges som et filter, bevares kun de elementer, som prædikatet evalueres for som TRUE.

Prædikater til sammenligning

Sammenlign værdier ved hjælp af disse operatorer:

  • = (lig med)
  • <> (ikke lig med)
  • < (mindre end)
  • > (større end)
  • <= (mindre end eller lig med)
  • >= (større end eller lig med)

GQL bruger tre-værdibaseret logik, hvor sammenligninger med null-returnering UNKNOWN:

Expression Result
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Du kan se en specifik sammenligningsfunktion i dokumentationen for hver værditype i GQL-værdier og værdityper.

Eksempel:

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

Regler for talundertvingning:

I prioriteret rækkefølge:

  1. Sammenligningsudtryk, der involverer argumenter med omtrentlige numeriske typer, gennemtvinger alle argumenter, så de har en omtrentlig numerisk type.
  2. Sammenligningsudtryk, der involverer argumenter for både signerede og ikke-signerede heltalstyper, gennemtvinger alle argumenter, så de er af en heltalstype, der er signeret.

Logiske udtryk

Kombiner betingelser med logiske operatorer:

  • AND (begge betingelser er sande)
  • OR (begge betingelser er sande)
  • NOT (negerer betingelse)

Eksempel:

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

Prædikater for egenskabens eksistens

For at tjekke, om der findes egenskaber, kan du bruge:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Notat

Forsøg på at tilgå en kendt ikke-eksisterende egenskab resulterer i en syntaksfejl. Adgang til en potentielt ikke-eksisterende ejendom vurderer til null. Vurderingen af, om en egenskab er kendt eller potentielt ikke-eksisterende, foretages baseret på typen af den tilgåede node eller kant.

Prædikater for listemedlemskab

Test, om værdierne findes på lister:

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

Prædikater for strengmønster

Søg efter strenge ved hjælp af mønstermatch:

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

Aritmetiske udtryk

Brug aritmetiske standardoperatorer med numeriske værdier:

  • + (tilføjelse)
  • - (subtraktion)
  • * (multiplikation)
  • / (division)

Aritmetiske operatorer følger generelle matematiske konventioner.

Forrang:

Operatorer følger generelt etablerede regler for rangplacering af operatorer, f.eks * . før +. Brug parenteser til at styre evalueringsrækkefølgen efter behov.

Eksempel:

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

Regler for tvangsforanstaltninger:

I prioriteret rækkefølge:

  1. Aritmetiske udtryk, der involverer argumenter med omtrentlige taltyper, returnerer et resultat af en omtrentlig numerisk type.
  2. Aritmetiske udtryk, der involverer argumenter af både signerede og usignerede heltalstyper, returnerer et resultat af en signeret heltalstype.

Eksempel:

LET birth_year = p.birthday / 10000
RETURN birth_year

Egenskabsadgang

Access-egenskaber ved hjælp af punktnotation:

p.firstName
edge.creationDate

Listeadgang

Adgang til listeelementer ved hjælp af nulbaseret indeksering:

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

Indbyggede funktioner

GQL understøtter forskellige indbyggede funktioner til databehandling og analyse.

Aggregeringsfunktioner

Aggregeringsfunktioner bruges til at evaluere et udtryk over et sæt rækker og opnå en endelig resultatværdi ved at kombinere de værdier, der beregnes for hver række. Følgende aggregeringsfunktioner understøttes for graph i Microsoft Fabric:

  • count(*) - tæller rækker
  • sum(expression) - summerer numeriske værdier
  • avg(expression) – beregner gennemsnittet af numeriske værdier
  • min(expression) - finder minimumværdien
  • max(expression) - finder maksimumværdien
  • collect_list(expression) - indsamler værdier på en liste

Aggregeringsfunktioner ignorerer generelt null-værdier og returnerer altid en null-værdi, når der ikke er angivet nogen materialeinputværdier. Du kan bruge coalesce til at få en anden standardværdi: coalesce(sum(expr), 0). Den eneste undtagelse er den count aggregeringsfunktion, der altid tæller de angivne værdier, der ikke er null, og returnerer 0, hvis der ikke er nogen. Bruges count(*) til også at medtage null-værdier i antallet.

Aggregeringsfunktioner bruges på tre forskellige måder:

  • Til beregning af (lodrette) aggregeringer over hele tabeller
  • Til beregning af (lodrette) aggregeringer over undertables, der bestemmes af en grupperingsnøgle
  • Til beregning af (vandrette) aggregeringer over elementerne på en gruppeliste

Lodrette aggregeringer:

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

Vandrette aggregeringer:

Vandret aggregering beregner aggregeringer over elementerne i gruppelistevariabler fra mønstre med variabel længde:

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

Vandret aggregering har altid forrang frem for lodret sammenlægning. Hvis du vil konvertere en gruppeliste til en almindelig liste, skal du bruge collect_list(edges).

Notat

Du kan se omfattende dækning af sammenlægningsteknikker, herunder kantbinding med variabel længde og kombination af vandret/lodret aggregering, under Avancerede sammenlægningsteknikker.

Streng funktioner

  • char_length(string) - returnerer strenglængden
  • upper(string)– returnerer varianten med store bogstaver af den angivne streng (kun US ASCII)
  • lower(string)– returnerer en lille variant af den angivne streng (kun US ASCII)
  • trim(string) - fjerner foranstillede og efterstillede mellemrum
  • string_join(list, separator) – joinforbinder listeelementer med separator

Eksempel:

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

Graf funktioner

  • nodes(path) – returnerer noder fra en stiværdi
  • edges(path) - returnerer kanter fra en stiværdi
  • labels(node_or_edge) - returnerer mærkaterne for en node eller kant som en liste over strenge

Eksempel:

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

Listefunktioner

  • size(list) – returnerer størrelsen på en listeværdi
  • trim(list,n) - trim en liste, så den højst er af 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

Tidsmæssige funktioner

  • zoned_datetime() – returnerer den aktuelle zoned datetime
  • zoned_datetime("2025-09-12T10:10:52Z") – returnerer zoneinddelt datetime, der er angivet af argumentet i ISO 8601-format

Eksempel:

RETURN zoned_datetime() AS now

Generiske funktioner

  • coalesce(value1, value2, ...) – returnerer den første værdi, der ikke er null

Eksempel:

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