Kirjoita yleisiä GQL-kyselyitä Microsoft Fabric -ohjelmassa

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.

Esimerkkeinä käytetään sosiaalisen verkoston otosaineistoa. Täydellisen kieliviitteen löydät GQL:n kielioppaasta.

Edellytykset

  • Graafinen alkio, jossa data on ladattu. Jos olet uusi graafien parissa, suorita ensin opastus .
  • Perusasioiden ja MATCH kysymysten 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ä, jotka ovat kahden hypyn päässä – Alicen ystävien ystäviä, joita Alice ei suoraan tunne:

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

Vinkki

Aseta aina yläraja muuttuvan pituuden kulkumatkalle. Rajoittamattomat kuviot suurissa tai tiheissä graajoissa voivat saavuttaa kyselyaikakatkaisun rajoja. Katso Nykyiset rajoitukset.

Laske suhteita yksiköittäin

Käytä GROUP BY With count(*) laskemaan, kuinka monta suhdetta kukin entiteetti on.

Laske, kuinka monta ystävää kullakin henkilöllä on, järjestettynä useimmasta vähimpään:

MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20

Laske, kuinka monta työntekijää kussakin yrityksessä työskentelee:

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC

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äytä OPTIONAL MATCH ja seuraa null-tarkistusta löytääksesi solmut, joilla ei ole yhteensopivuussuhdetta.

Etsi ihmisiä, jotka eivät työskentele missään yrityksessä:

MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100

Löydä postauksia ilman kommentteja:

MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
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 name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY 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.