Filtrera och aggregera grafdata i Microsoft Fabric

Note

Den här funktionen är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Filtrering begränsar dina resultat till de rader som är viktiga. Sammansättning sammanfattar dessa rader i antal, summor och medelvärden. Den här artikeln visar hur du använder båda teknikerna i GQL-frågor mot grafer i Microsoft Fabric.

Exempel använder exempeldatauppsättningen för sociala nätverk. En fullständig referens till GQL-instruktioner och -uttryck finns i språkguiden för GQL.

Förutsättningar

  • Ett diagramobjekt med data inlästa. Om du är ny inom grafteknologi, slutför först självstudien.
  • Kunskaper om grundläggande MATCH- och RETURN-sökfrågor. Se språkguiden för GQL.

Filtrera rader med FILTER

Använd FILTER för att endast behålla de rader som uppfyller ett villkor. Placera FILTER efter MATCH för att begränsa de matchade resultaten.

Följande fråga returnerar alla kvinnor med sitt namn och sin födelsedag:

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

Kombinera flera villkor med AND och OR. Följande fråga returnerar till exempel namnen på alla kvinnor födda före 1990:

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

Tips/Råd

För bättre prestanda filtrerar du under mönstermatchning med en infogad WHERE sats i stället för i en separat FILTER instruktion. Se Filter vid mönstermatchning.

Filtrera vid mönstermatchning

Infogade WHERE satser i ett MATCH mönster begränsar vilka noder och kanter som matchas innan några resultat skapas. Den här metoden är effektivare än ett post-matchningsvillkor FILTER eftersom frågemotorn beskär rader tidigare.

Till exempel för att hitta personer födda före 1994 tillsammans med företaget där de arbetar, vilket begränsar resultaten till företag vars namn börjar 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

Filtrera kantegenskaper på samma sätt. Om du till exempel bara vill returnera personer som började arbeta på ett företag år 2000 eller senare:

MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom

Mer information om prestandaskillnaden mellan infogad och eftermatchningsfiltrering finns i Optimera GQL-frågeprestanda.

Hantera null-värden i filter

GQL använder logik med tre värden: predikat utvärderas till TRUE, FALSEeller UNKNOWN. När ett egenskapsvärde är null returnerar jämförelser UNKNOWN. FILTER UNKNOWN behandlas som inte matchande, så raden exkluderas.

Använd IS NULL och IS NOT NULL för att testa explicit för null-värden:

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

Använd coalesce() för att ersätta ett standardvärde när en egenskap kan vara null:

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

Caution

NULL = NULL utvärderas till UNKNOWN, inte TRUE. Använd IS NULL alltid för att testa null-värden, inte likhet.

Aggregera resultat med RETURN

Använd aggregeringsfunktioner i RETURN för att sammanfatta dina resultat. GQL stöder count(), sum(), avg(), min()och max().

Om du till exempel vill räkna alla personer i diagrammet:

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

Så här räknar du distinkta värden, till exempel hur många olika företag som anställer personer:

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

Gruppera resultat med GROUP BY

Använd GROUP BY i RETURN för att gruppera rader efter delade värden och beräkningsaggregeringar i varje grupp. Den här gruppering är GQL-motsvarigheten till SQL GROUP BY.

Om du till exempel vill räkna anställda per företag:

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

Gruppera efter flera kolumner och beräkna flera aggregeringar samtidigt. Du kan till exempel dela upp antalet personer och födelsedagsintervall efter kön och webbläsare och returnera de 10 vanligaste kombinationerna:

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

Alla icke-aggregerade uttryck i RETURN måste visas i GROUP BY. Uttryck som inte finns i GROUP BY måste använda en mängdfunktion.

Sortera och begränsa aggregerade resultat

Använd ORDER BY och LIMIT tillsammans med GROUP BY för att hitta top-N-resultat.

Om du till exempel vill hitta de fem främsta städerna efter antal invånare:

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

Viktigt!

Placera ORDER BY före LIMIT. LIMIT gäller alltid för den redan sorterade resultatuppsättningen.

Använd CASE för villkorsvärden i resultat

Använd CASE/WHEN/THEN/ELSEför att beräkna villkorsvärden i RETURN eller .LET

Om du till exempel vill kategorisera människor i epoker baserat på deras födelseå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