Gráfadatok szűrése és összesítése a Microsoft Fabric

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 és RETURN leké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