Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Bemærkning
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. For mere information, se Supplerende Brugsvilkår for Microsoft Azure Forhåndsvisninger.
Filtrering indsnævrer dine resultater til de rækker, der betyder noget. Aggregering opsummerer disse rækker i tællinger, totaler og gennemsnit. Denne artikel viser dig, hvordan du anvender begge teknikker i GQL-forespørgsler mod grafer i Microsoft Fabric.
Eksempler bruger datasættet fra sociale netværk. For en fuld reference af GQL-udsagn og -udtryk, se GQL-sprogvejledningen.
Forudsætninger
- Et grafelement med data indlæst. Hvis du er ny til graf, så gennemfør tutorialen først.
- Fortrolighed med grundlæggende
MATCHogRETURNforespørgsler. Se GQL-sprogvejledningen.
Filterrækker med FILTER
Brug FILTER kun de rækker, der opfylder en betingelse. Placer FILTER efter MATCH for at indsnævre de matchede resultater.
Følgende søgning returnerer alle kvinder med deres navn og fødselsdato:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Kombiner flere betingelser med AND og OR. For eksempel returnerer følgende forespørgsel navnene på alle kvinder født før 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tip
For bedre ydeevne, filtrer under mønstergenkendelse med en inline-klausul WHERE i stedet for i en separat FILTER sætning. Se Filter under mønstermatchning.
Filter under mønstergenkendelse
Inline-klausuler WHERE inden for et MATCH mønster begrænser, hvilke noder og kanter der matches, før der produceres resultater. Denne tilgang er mere effektiv end en post-match-klausul FILTER , fordi forespørgselsmotoren beskærer rækker tidligere.
For eksempel at finde personer født før 1994 sammen med den virksomhed, hvor de arbejder, og begrænser resultaterne til virksomheder, hvis navn starter med 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filter kantegenskaber på samme måde. For eksempel kun at returnere personer, der begyndte at arbejde i en virksomhed i 2000 eller senere:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
For mere om forskellen i ydeevne mellem inline og post-match filtrering, se Optimer GQL-forespørgselsydelse.
Håndter nullværdier i filtre
GQL bruger tre-værdi logik: prædikater evaluerer til TRUE, FALSE, eller UNKNOWN. Når en egenskabsværdi er nul, returnerer UNKNOWNsammenligninger .
FILTER behandler UNKNOWN som ikke matchende, så rækken udelukkes.
Brug IS NULL og IS NOT NULL til eksplicit at teste for nullværdier:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Brug coalesce() til at erstatte en standardværdi, når en egenskab kan være null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Advarsel!
NULL = NULL vurderer til UNKNOWN, ikke TRUE. Brug den altid IS NULL til at teste for nullværdier, ikke lighed.
Samlede resultater med RETURN
Brug aggregerede funktioner til RETURN at opsummere dine resultater. GQL understøtter count(), sum(), , avg(), min()og max().
For eksempel, for at tælle alle personer i grafen:
MATCH (p:Person)
RETURN count(*) AS totalPeople
For at tælle forskellige værdier som hvor mange forskellige virksomheder der ansætter folk:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Grupperesultater med GROUP BY
Brug GROUP BY i RETURN til at gruppere rækker efter fælles værdier og beregne aggregater inden for hver gruppe. Denne gruppering er GQL-ækvivalenten til SQL GROUP BY.
For eksempel, for at tælle medarbejdere pr. virksomhed:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Gruppere i flere kolonner og beregne flere aggregater på én gang. For eksempel, opdel antal personer og fødselsdato efter køn og browser, og giv de 10 mest almindelige kombinationer:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Bemærkning
Alle ikke-aggregerede udtryk i RETURN skal forekomme i GROUP BY. Udtryk, der ikke er i GROUP BY , skal bruge en aggregeret funktion.
Sorter og begræns aggregerede resultater
Brug ORDER BY og LIMIT sammen med GROUP BY at finde top-N resultater.
For eksempel for at finde de fem største byer efter antal indbyggere:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Vigtige oplysninger
Stedet ORDER BY før LIMIT.
LIMIT gælder altid for det allerede sorterede resultatsæt.
Brug CASE til betingede værdier i resultater
Brug CASE/ELSETHENWHEN//til at beregne betingede værdier i RETURN eller .LET
For eksempel at kategorisere folk i epoker baseret på deres fødselsår:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era