Suodata ja aggregoitu graafidataa Microsoft Fabric -ohjelmassa

Note

Tämä ominaisuus on tällä hetkellä julkisessa esikatselussa. Tämä esikatselu tarjotaan ilman palvelutasosopimusta, eikä sitä suositella tuotantokuormituksiin. Tiettyjä ominaisuuksia ei ehkä tueta tai niiden ominaisuudet voivat olla rajoitettuja. Lisätietoja löytyy Supplemental Terms of Use for Microsoft Azure Previews.

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.

Esimerkkeinä käytetään sosiaalisen verkoston otosaineistoa. Täydellisen viitteen GQL-lauseista ja lauseista löytyy GQL-kielioppaasta.

Edellytykset

  • Graafinen alkio, jossa data on ladattu. Jos olet uusi graafien parissa, suorita ensin opastus .
  • Perusasioiden ja RETURN kysymysten tuntemusMATCH. 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

Paremman suorituskyvyn saavuttamiseksi suodata kuvion sovituksen aikana inline-lauseella WHERE sen sijaan, että käyttäisit erillistä FILTER lausetta. Katso Suodatin kuvioiden sovittamisen aikana.

Suodatin kuvion sovittamisen aikana

Kuvion sisällä olevat MATCH rivilausekkeet WHERE rajoittavat, mitkä solmut ja kaaret sovitetaan ennen kuin tuloksia saadaan. Tämä lähestymistapa on tehokkaampi kuin ottelun jälkeinen FILTER lauseke, koska kyselymoottori karsii rivit aikaisemmin.

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 suorituskyvyn erosta inline- ja post-match-suodatuksen välillä 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 who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname

Käytä coalesce() oletusarvon korvaamiseen, kun ominaisuus voi olla nolla:

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

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. GQL tukee count(), sum(), avg(), min(), ja max().

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

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 companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY 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 cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5

Tärkeää

Paikka ORDER BY ennen LIMIT. LIMIT pätee aina jo järjestettyyn tulosjoukkoon.

Käyttö CASE ehdollisille arvoille tuloksissa

Käytä CASE/ELSETHENWHEN//ehdollisten arvojen laskemiseen tai .RETURNLET

Esimerkiksi ihmisten luokittelu aikakausiin syntymävuoden perusteella:

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