Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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- ochRETURN-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