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.
Tämä artikkeli tarjoaa käytännöllisiä GQL-kyselykuvioita yleisiin graafitehtäviin Microsoft Fabric:ssa: naapureiden löytäminen, monihyppyyhteyksien läpikäyminen, jaettujen yhteyksien tunnistaminen, suhteiden laskeminen ja yhteyksien puuttuvien entiteettien löytäminen.
Esimerkit käyttävät sosiaalisen verkoston otosaineistoa. Kyselyvirran ja lauseiden kokonaisvaltaisen selityksen löydät GQL-kielioppaasta. Käytä tätä artikkelia, kun tiedät, minkä graafisen tehtävän haluat suorittaa. Systemaattista ohjetta solmu-, reuna- ja polkukuvioiden rakentamiseen löytyy kohdasta Write graph pattern queries. Yksityiskohtaiset suodatus- ja aggregointityönkulut löytyvät kohdasta Suodata ja aggregoitu graafidata.
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.
Etsi suorat naapurit
Palauta kaikki solmut, jotka on yhdistetty aloitussolmuun yhdellä hypyllä.
Etsi kaikki, jotka tietty henkilö tuntee:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Löydä kaikki yritykset, joissa henkilö on työskennellyt:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Löydä ystävien ystäviä (monihyppäys)
Käytä muuttuvan pituisia kuvioita {min,max} useamman kuin yhden hypyn ylittämiseen.
Etsi ihmisiä, joihin pääsee täsmälleen kahden knows reunan päässä Alicesta:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Löydä kaikki tavoitettavissa kolmen asteen sisällä:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Löydä lyhin reitti Alicesta jokaiselle henkilölle, joka on saavutettavissa neljän hypyn sisällä:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, path_length(p) AS hopCount
ORDER BY hopCount, dst.lastName
LIMIT 100
Jos useampi lyhyin polku saavuttaa saman henkilön samassa hyppymäärässä, ANY SHORTEST palauttaa yksi niistä ilman determinististä tasapelivaihtoehtoa.
Inline-predikaatit rajoittavat, mitkä polut ovat oikeutettuja .ANY SHORTEST
Jälkisuodattimet tulevat voimaan, kun lyhin polku on valittu. Esimerkkeinä katso Paikkapredikaatit ennen tai jälkeen polun valinnan.
Vinkki
Käytä rajallista ylärajaa ennustettavaan kyselykustannuksiin. Rajoittamatonta ALL WALK liikkumista ei tueta. Muut rajoittamattomat polkutilat voivat silti tuottaa suuria tuloksia. Katso Nykyiset rajoitukset.
Laske suhteita yksiköittäin
Käytä GROUP BY With count(*) laskemaan, kuinka monta suhdetta kukin entiteetti on.
Yksityiskohtaiset ryhmittelyt, aggregaattisuodatukset ja ehdolliset reitityskuviot löytyvät kohdasta Suodatin ja aggregoitu graafidata.
Laske, kuinka monta ystävää kullakin henkilöllä on, järjestettynä useimmasta vähimpään:
MATCH (p:Person)-[:knows]->(friend:Person)
LET personId = p.id, name = p.firstName || ' ' || p.lastName
RETURN personId, name, count(*) AS friendCount
GROUP BY personId, name
ORDER BY friendCount DESC
LIMIT 20
Laske arvo kullekin entiteille
Käytä korreloitua CALL alikyselyä laskeaksesi arvon jokaiselle syöteriville. Ulomman kyselyn muuttujat ovat implisiittisesti saatavilla alikyselyn sisällä.
Laske ystävien määrä kullekin henkilölle:
MATCH (p:Person)
CALL {
MATCH (p)-[:knows]->(friend:Person)
RETURN count(*) AS friendCount
}
RETURN p.firstName, p.lastName, friendCount
ORDER BY friendCount DESC
Ulommat muuttujat pysyvät käytettävissä myöhemmin CALL. Alikyselyn sisällä luoduista muuttujista vain palautetut sarakkeet tulevat saataville sen ulkopuolella. Ryhmättämätön count(*) palautus, 0 kun yhteensopivia ystäviä ei ole, joten tämä kysely säilyttää ihmiset, joilla ei ole ystäviä.
Tavallinen CALL pudottaa ulkorivin, kun alikysely ei palauta rivejä, ja tuottaa yhden ulostulorivin jokaiselle alikyselyriville, kun se palauttaa useita rivejä. Käytä OPTIONAL CALL sitä, kun sinun täytyy säilyttää ulkoinen rivi, jolla ei ole vastaavaa alikyselyriviä.
Löydä yhteisiä yhteyksiä
Muuttujan uudelleenkäyttö kahdessa kuvion osassa luo implisiittisen "sama solmu" -rajoitteen. Käytä tätä rajoitetta löytääksesi entiteettejä, jotka ovat yhteydessä yhteisen kolmannen entiteettiin.
Etsi pareja, jotka molemmat tuntevat saman henkilön:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
Etsi parit, jotka työskentelevät samassa yrityksessä:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Vinkki
Ehto WHERE a.id < b.id estää dpluusioparien (Alice–Bob ja Bob–Alice) esiintymisen tuloksissa.
Etsi olentoja ilman suhteita
Käytetään NOT EXISTS etsimään solmuja, joille korreloitu alikysely ei anna rivejä.
Etsi ihmisiä, jotka eivät työskentele missään yrityksessä:
MATCH (p:Person)
WHERE NOT EXISTS {
MATCH (p)-[:workAt]->(c:Company)
RETURN c
}
RETURN p.firstName, p.lastName
LIMIT 100
Löydä postauksia ilman kommentteja:
MATCH (post:Post)
WHERE NOT EXISTS {
MATCH (comment:Comment)-[:replyOf]->(post)
RETURN comment
}
RETURN post.id, post.content
LIMIT 100
Etsi entiteettejä, joilla on paljon yhteyksiä
Yhdistä GROUP BY ja FILTER tunnistaa vahvasti yhteydessä olevat solmut. Tämä menetelmä on hyödyllinen hubien tai poikkeamien löytämisessä.
Etsi ihmisiä, joilla on yli 10 ystävää:
MATCH (p:Person)-[:knows]->(friend:Person)
LET personId = p.id, name = p.firstName || ' ' || p.lastName
RETURN personId, name, count(*) AS friendCount
GROUP BY personId, name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER After GROUP BY toimii kuten HAVING SQL:ssä. Se suodattaa koottujen tulosten perusteella, ei yksittäisten rivien perusteella.