Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Suodatus rajaa tulokset tärkeisiin riveihin. Aggregaatio tiivistää nämä rivit lukumääriin, kokonaislukuihin ja keskiarvoihin. Tässä artikkelissa näytetään, miten molempia tekniikoita sovelletaan GQL-kyselyissä Microsoft Fabric -graafia vastaan.
Esimerkit käyttävät sosiaalisen verkoston otosaineistoa. Kyselyvirran ja lauseiden kokonaisvaltaisen selityksen löydät GQL-kielioppaasta.
Käytä tätä artikkelia rivi- ja kuviosuodatukseen, ryhmiteltyyn ja ryhmittelemättömään aggregointiin, aggregaattikohtaisiin suodattimiin sekä ehdolliseen reititykseen. Multihop-kuvioiden rakentamista ja polkujen valintaa varten katso Write graph pattern queries. Valmiita mukautettavia liiketoimintatehtäviä varten katso Kirjoita yleiset GQL-kyselyt.
Edellytykset
- Graafialkio, joka on rakennettu sosiaalisen verkoston otosaineistosta, jossa on solmutyypit, reunatyypit ja ominaisuudet, jotka on kuvattu sosiaalisen verkoston skeeman esimerkissä.
- Perusasioiden ja
MATCHkysymysten tuntemusRETURN. Katso GQL:n kieliopas.
Suodatinrivit SUODATTIMELLA
Käytä FILTER vain niitä rivejä, jotka täyttävät tietyn ehdon. Aseta FILTER peräkkäin MATCH , jotta voit rajata sovitettuja tuloksia.
Seuraava kysely palauttaa kaikki naiset nimellä ja syntymäpäivällä:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Yhdistä useita ehtoja ja ANDOR. Esimerkiksi seuraava kysely palauttaa kaikkien ennen vuotta 1990 syntyneiden naisten nimet:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Vinkki
Käytä inline-lauseketta WHERE , kun ehto määrittelee, mikä solmu tai reuna voi osallistua otteluun. Käytä, FILTER kun ehto koskee aiemman lauseen tuottamaa riviä. Predikaatin sijoittelu voi muuttaa lyhimmän polun tuloksia; katso Sijoituspredikaatit ennen tai jälkeen polun valinnan.
Suodatin kuvion sovittamisen aikana
Inline-lausekkeet WHERE kuvion MATCH sisällä rajoittavat, mitkä solmut ja reunat täyttävät ottelun. Kyselyoptimaattori voi soveltaa vastaavia predikaatteja skannauksen aikana, joten inline-syntaksi ei ole itsessään nopeampi kuin erillinen FILTER. Valitse muoto, joka ilmaisee tarkoitetun semantiikkaa.
Esimerkiksi, kun etsitään ennen vuotta 1994 syntyneet henkilöt yhdessä heidän työpaikkansa yrityksen kanssa, ja tulokset rajoitetaan yrityksiin, joiden nimi alkaa 'A':lla:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Suodattimen reunan ominaisuudet ovat samalla tavalla. Esimerkiksi, palautetaan vain henkilöt, jotka aloittivat työskentelyn yrityksessä vuonna 2000 tai myöhemmin:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Lisätietoja inline- ja post-match-suodatuksen valitsemisesta löytyy kohdasta Optimize GQL query performance.
Käsittele nollaarvoja suodattimissa
GQL käyttää kolmiarvoista logiikkaa: predikaatit arvioivat , TRUEFALSE, tai UNKNOWN. Kun ominaisuuden arvo on nolla, vertailut palauttavat UNKNOWN.
FILTER käsitellään UNKNOWN ei täsmäävänä, joten rivi jätetään pois.
Käytä IS NULL ja IS NOT NULL nollaarvojen testaamiseen eksplisiittisesti:
-- Only include people whose browser is known
MATCH (p:Person)
FILTER p.browserUsed IS NOT NULL
RETURN p.firstName, p.browserUsed
Käytä coalesce() oletusarvon korvaamiseen, kun ominaisuus voi olla nolla:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.browserUsed, 'Unknown browser') AS browser
Varoitus
NULL = NULL arvioi UNKNOWN, ei TRUE. Käytä IS NULL aina nollaarvojen testaamiseen, ei yhtällisyyttä.
Yhteenlasketut tulokset RETURNin kanssa
Käytä aggregaatiofunktioita RETURN yhteenvetoon tulosten tiivistämiseen. Graafi tukee seuraavia aggregaattifunktioita: COUNT, SUM, AVG, MAXCOLLECT_ONEMINCOLLECT_LISTja .COLLECT_ELEMENTS
Esimerkiksi, kun lasketaan kaikki kuvaajan henkilöt:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Jotta voidaan laskea erilliset arvot, kuten kuinka moni eri yritys työllistää ihmisiä:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Suodattimen syöte yhdelle aggregaatille
Lisää FILTER (WHERE predicate) aggregaatin perään suodattamaan vain kyseisen aggregaatin syötteen. Muut aggregaatit samassa RETURN järjestelmässä vastaanottavat silti kaikki syöterivit.
MATCH (p:Person)
RETURN count(*) AS allPeople,
count(*) FILTER (WHERE p.birthday < 19900101) AS peopleBornBefore1990
Lisää LIMIT yhteenlaskettu suodatin sisäpuolelle, jotta käyttö on korkeintaan yhtä monta kelpoisuusriveä. Kysely soveltaa predikaattia ennen aggregaattikohtaista rajaa.
MATCH (p:Person)
RETURN count(*) FILTER (WHERE p.birthday < 19900101 LIMIT 100) AS sampleCount
Aggregaattikohtainen FILTER ja LIMIT älä poista rivejä muusta kyselystä. Käytä FILTER lauseketta tai match-tason WHERE lauseketta, kun haluat suodattaa rivivirtaa.
Kerää arvot
Käytetään COLLECT_LIST palauttamaan yksi listaelementti jokaiselle syötearvolle, mukaan lukien nollaarvot. Lisää DISTINCT , jotta kaksoiskappaleet poistuvat.
MATCH (p:Person)
RETURN collect_list(DISTINCT p.browserUsed) AS browsers
COLLECT_ONE palauttaa yhden ei-nollasyötteen arvon. Valittu arvo ei ole deterministinen, joten sitä käytetään vain, kun mikä tahansa ryhmän arvo on hyväksyttävä.
COLLECT_ELEMENTS hyväksyy listaarvoiset syötteet ja yhdistää niiden elementit yhdeksi listaksi:
MATCH (p:Person)
RETURN collect_elements([p.firstName, p.lastName]) AS names
Ilman sarakkeiden ryhmittelyä aggregoitu kysely ilman syöterivejä palauttaa tyhjän listan joukosta COLLECT_LIST ja COLLECT_ELEMENTS ja nullista .COLLECT_ONE
Ryhmän tulokset GROUP BY -menetelmällä
Käytä GROUP BY rivejä RETURN jaettujen arvojen mukaan ryhmittelemiseen ja kunkin ryhmän aggregaattien laskemiseen. Tämä ryhmittely on GQL:n vastine SQL GROUP BY:lle.
Esimerkiksi työntekijöiden laskeminen yrityskohtaisesti:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
ORDER BY employeeCount DESC
Ryhmittele useiksi sarakkeiksi ja lasketaan useita aggregaatteja samanaikaisesti. Esimerkiksi jaa henkilömäärä ja syntymäpäiväväli sukupuolen ja selaimen mukaan, palauttaen 10 yleisintä yhdistelmää:
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
Kaikkien ei-aggregaattisten lausekkeiden joukossa RETURN on oltava .GROUP BY Lausekkeet, jotka eivät ole sisällä GROUP BY , täytyy käyttää aggregaatiofunktiota.
Lajittele ja rajoita koottuja tuloksia
Käytä ORDER BY ja LIMIT yhdessä GROUP BY löytääksesi top-N-tulokset.
Esimerkiksi, jotta löydät viisi parasta kaupunkia asukkaiden määrän perusteella:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityId = city.id, cityName = city.name
RETURN cityId, cityName, count(*) AS residentCount
GROUP BY cityId, cityName
ORDER BY residentCount DESC
LIMIT 5
Tärkeää
Paikka ORDER BY ennen LIMIT.
LIMIT pätee aina jo järjestettyyn tulosjoukkoon.
Reittirivit ehdollisilla lauseilla
Käytä ehdollista lausetta reitittämään jokainen saapuva rivi ensimmäiseen vastaavaan haaraan. Syöte voi tulla mistä tahansa edeltävästä kyselyvaiheesta, ei pelkästään aggregaatiosta. Esimerkiksi seuraava kysely luokittelee yritykset niiden työntekijämäärän laskemisen jälkeen:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
NEXT
WHEN employeeCount >= 100u THEN
RETURN companyId, companyName, employeeCount, 'Large' AS category
WHEN employeeCount >= 10u THEN
RETURN companyId, companyName, employeeCount, 'Medium' AS category
ELSE
RETURN companyId, companyName, employeeCount, 'Small' AS category
Haarat voivat suorittaa täydellisiä kyselylauseita ja sisäkkäisiä proseduureja, eivätkä vain palauteta lausekkeita. Seuraava esimerkki lähettää kolme syöttöriviä eri haaramuotojen läpi. Yksi haara suorittaa , MATCHtoinen yhdistää kaksi aggregaattia ja UNION ALL sitten kerää niiden tulokset, ja varahaara palauttaa vakion:
FOR selector IN [1, 2, 3]
RETURN selector
NEXT
WHEN selector = 1 THEN
MATCH (:Person)-[:knows]->(:Person)
RETURN count(*) AS total, 'Knows edges' AS category
WHEN selector = 2 THEN {
MATCH (:Person)-[:workAt]->(:Company)
RETURN count(*) AS partialCount
UNION ALL
MATCH (:Person)-[:studyAt]->(:University)
RETURN count(*) AS partialCount
NEXT
RETURN sum(partialCount) AS total, 'Affiliation edges' AS category
}
ELSE
RETURN 0u AS total, 'No selected metric' AS category
Kyselymoottori arvioi predikaatit järjestyksessä jokaiselle riville. Se pyörittää vain ensimmäistä vastaavaa haaraa. Jos predikaatti arvioi , UNKNOWNarviointi jatkuu seuraavalla haaralla. Ilman , ELSErivit, jotka eivät vastaa haaraa WHEN , jätetään pois.
Ehdolliset väitteet eroavat lausekkeista CASE . Graafi tukee yksinkertaisia CASE <expression> WHEN <value> lausekkeita tasa-arvon valintaan. Haetut CASE WHEN <predicate> ilmaisut eivät ole tuettuja. Lisätietoja löytyy kohdasta Ehdolliset lauseet.