Filtrer og aggreger grafdata i Microsoft Fabric

Note

Denne funksjonen er for øyeblikket i offentlig forhåndsversjon. Denne forhåndsvisningen leveres uten en tjenesteavtale, og anbefales ikke for produksjonsarbeidsbelastninger. Enkelte funksjoner støttes kanskje ikke eller kan ha begrensede funksjoner. For mer informasjon, se Supplemental Terms of Use for Microsoft Azure Previews.

Filtrering begrenser resultatene dine til de radene som betyr noe. Aggregering oppsummerer disse radene i tellinger, totaler og gjennomsnitt. Denne artikkelen viser deg hvordan du kan bruke begge teknikkene i GQL-spørringer mot grafer i Microsoft Fabric.

Eksempler bruker eksempeldatasett fra sosiale nettverk. For en fullstendig referanse av GQL-utsagn og uttrykk, se GQL-språkguiden.

Forutsetninger

  • Et grafelement med data lastet inn. Hvis du er ny på graf, fullfør veiledningen først.
  • Kjennskap til grunnleggende MATCH og RETURN spørringer. Se GQL-språkguiden.

Filterrader med FILTER

Bruk FILTER å beholde kun radene som oppfyller en betingelse. Plassering FILTER etter MATCH for å begrense de matchede resultatene.

Følgende søk gir alle kvinner 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 søk navnene på alle kvinner født før 1990:

MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName

Tips

For bedre ytelse, filtrer under mønstergjenkjenning med en inline-klausul WHERE i stedet for i en separat FILTER setning. Se Filter under mønstermatching.

Filter under mønstergjengivelse

Inline-klausuler WHERE inne i et MATCH mønster begrenser hvilke noder og kanter som matches før noen resultater produseres. Denne tilnærmingen er mer effektiv enn en post-match-klausul FILTER fordi spørringsmotoren beskjærer rader tidligere.

For eksempel, for å finne personer født før 1994 sammen med selskapet de jobber i, og begrense resultatene til selskaper hvis navn begynner 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 kantegenskaper på samme måte. For eksempel, å returnere kun personer som begynte å jobbe i et selskap 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 mer om ytelsesforskjellen mellom inline- og post-match-filtrering, se Optimaliser GQL-spørringsytelse.

Håndter nullverdier i filtre

GQL bruker treverdilogikk: predikater evaluerer til TRUE, FALSE, eller UNKNOWN. Når en egenskapsverdi er null, returnerer UNKNOWNsammenligninger . FILTER behandler UNKNOWN som ikke matchende, så raden er utelukket.

Bruk IS NULL og IS NOT NULL for å teste for nullverdier eksplisitt:

-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname

Bruk coalesce() for å erstatte en standardverdi når en egenskap kan være null:

MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName

Forsiktig!

NULL = NULL vurderer til UNKNOWN, ikke TRUE. Bruk den alltid IS NULL for å teste nullverdier, ikke likhet.

Samlede resultater med RETURN

Bruk aggregerte funksjoner for RETURN å oppsummere resultatene dine. GQL støtter , , , , min()og max(). avg()sum()count()

For eksempel, for å telle alle personer i grafen:

MATCH (p:Person)
RETURN count(*) AS totalPeople

For å telle ulike verdier som hvor mange forskjellige selskaper som ansetter folk:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount

Grupperesultater med GROUP BY

Bruk GROUP BY i RETURN for å gruppere rader etter delte verdier og beregne aggregater innenfor hver gruppe. Denne grupperingen er GQL-ekvivalenten til SQL GROUP BY.

For eksempel, for å telle ansatte per selskap:

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC

Grupper etter flere kolonner og beregn flere aggregater samtidig. For eksempel, bryt ned antall personer og fødselsområde etter kjønn og nettleser, og gi de 10 vanligste kombinasjonene:

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

Note

Alle ikke-aggregerte uttrykk i RETURN må forekomme i GROUP BY. Uttrykk som ikke er i GROUP BY må bruke en aggregert funksjon.

Sorter og begrens aggregerte resultater

Bruk ORDER BY og LIMIT sammen GROUP BY for å finne topp-N resultater.

For eksempel, for å finne de fem største byene etter antall innbyggere:

MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5

Viktig!

Plasser ORDER BY før LIMIT. LIMIT gjelder alltid for det allerede sorterte resultatsettet.

Bruk CASE for betingede verdier i resultater

Bruk CASE/ELSETHENWHEN//til å beregne betingede verdier i RETURN eller .LET

For eksempel, for å kategorisere folk i epoker basert på 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