Filtrer og aggreger grafdata i Microsoft Fabric

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 MATCH og RETURN forespø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