Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A szűrés az eredményeket a fontos sorokra szűkíti. Az aggregáció számba, összegbe és átlagba összegzi ezeket a sorokat. Ez a cikk bemutatja, hogyan alkalmazhatja mindkét technikát a GQL-lekérdezésekben a Microsoft Fabric gráfon.
A példák a közösségi hálózati mintaadatkészletet használják. A GQL-utasítások és -kifejezések teljes körű hivatkozását a GQL nyelvi útmutatójában találja.
Prerequisites
- Gráfelem betöltött adatokkal. Ha még csak most ismerkedik a gráf használatával, először végezze el az oktatóanyagot .
- Alapszintű
MATCHésRETURNlekérdezések ismerete. Lásd a GQL nyelvi útmutatót.
Sorok szűrése a FILTER használatával
Csak a feltételnek megfelelő sorok megtartására használható FILTER . Helyezze el a FILTER a MATCH után a találatok szűkítése érdekében.
A következő lekérdezés az összes nőstényt visszaadja a nevükkel és születésnapjukkal:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Több feltétel kombinálása AND és OR segítségével. Az alábbi lekérdezés például az 1990 előtt született összes nő nevét adja vissza:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Jótanács
A jobb teljesítmény érdekében szűrjön a mintaegyeztetés során egy beágyazott WHERE záradékkal, és ne egy elkülönített FILTER utasításban. Lásd : Szűrés a mintaegyeztetés során.
Szűrés a mintaegyezés során
A mintán belüli WHERE beágyazott záradékok kiválasztják, hogy mely csomópontok és élek egyeznek meg az eredmények létrehozása előtt. Ez a megközelítés hatékonyabb, mint egy egyeztetés FILTER utáni záradék, mert a lekérdezési motor korábban metszi a sorokat.
Ha például az 1994 előtt született személyeket a munkahelyük szerinti vállalattal együtt szeretné megtalálni, az eredményeket azokra a vállalatokra korlátozza, amelyeknek a neve "A"-vel kezdődik:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Az éltulajdonságok szűrése ugyanúgy történik. Ha például csak azokat szeretné visszaadni, akik 2000-ben vagy később kezdtek dolgozni egy vállalatnál:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
A beágyazott és a találat utáni szűrés közötti teljesítménykülönbségről további információt a GQL-lekérdezés teljesítményének optimalizálása című témakörben talál.
Null értékek kezelése szűrőkben
A GQL három értékű logikát használ: a predikátumok kiértékelődnek TRUE, FALSE vagy UNKNOWN értékre. Ha egy tulajdonság értéke null, az összehasonlítás eredménye UNKNOWN.
FILTER
UNKNOWN nem egyezőként kezeli, ezért a sor ki van zárva.
Az IS NULL és IS NOT NULL kifejezéseket használja a null értékek explicit teszteléséhez.
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Az alapértelmezett érték helyettesítésére használható coalesce() , ha egy tulajdonság null értékű lehet:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Caution
NULL = NULL értéke UNKNOWN, nem pedig TRUE. Mindig null értékek tesztelésére használható IS NULL , nem egyenlőségre.
Eredmények összesítése a RETURN használatával
Összesítő függvények RETURN használata az eredmények összegzéséhez. A GQL támogatja count()a , sum(), avg(), min()és max().
Például a gráfban szereplő összes személy megszámlálásához:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Különböző értékek, például hogy hány különböző vállalat alkalmaz személyeket:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Találatok csoportosítása a GROUP BY használatával
Használja a GROUP BY a RETURN-ben, hogy a sorokat közös értékek szerint csoportosítsa, és minden egyes csoporton belül aggregált értékeket számítson. Ez a csoportosítás az SQL GROUP BYGQL-megfelelője.
Például az alkalmazottak vállalatonkénti megszámlálásához:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Csoportosítsa több oszlop szerint, és egyszerre több aggregátumot számítson ki. Bontsa le például a személyszámot és a születésnapi tartományt nem és böngésző szerint, és adja vissza a 10 leggyakoribb kombinációt:
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
Az összes nem összesítő kifejezésnek RETURN meg kell jelennie a következőben GROUP BY: . A nem használt GROUP BY kifejezéseknek összesítő függvényt kell használniuk.
Összesített eredmények rendezése és korlátozása
ORDER BY és LIMIT használata együtt GROUP BY a top-N találatok megtalálásához.
Ha például az első öt várost szeretné megtalálni a lakosok száma szerint:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Important
Helyezzük ORDER BY az elé LIMIT.
LIMIT mindig a már rendezett eredményhalmazra vonatkozik.
A CASE használata feltételes értékekhez az eredményekben
A feltételes értékek kiszámítására használható CASE/WHEN/THEN/ELSERETURN-ban vagy LET-ban.
Például, hogy kategorizálja az embereket korokba a születési évük alapján:
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