Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen gir praktiske GQL-spørringsmønstre for vanlige grafoppgaver i Microsoft Fabric: å finne naboer, traversere multihop-forbindelser, identifisere delte forbindelser, telle relasjoner og finne enheter uten forbindelser.
Eksempler bruker eksempeldatasett fra sosiale nettverk. For fullstendig språkreferanse, se GQL-språkveiledningen.
Forutsetninger
- Et grafelement med data lastet inn. Hvis du er ny på graf, fullfør veiledningen først.
- Kjennskap til grunnleggende
MATCHogRETURNspørringer. Se GQL-språkguiden.
Finn direkte naboer
Returner alle noder som er koblet til en startnode med ett hopp.
Finn alle en bestemt person kjenner:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Finn alle selskaper en person har jobbet i:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Finn venner av venner (multi-hop)
Bruk mønstre med variabel lengde for {min,max} å krysse mer enn ett hopp.
Finn folk to hopp unna – venner av Alices venner som Alice ikke kjenner direkte:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Finn alle tilgjengelige innen tre grader:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tips
Sett alltid en øvre grense for variabel lengde på gjennomgang. Ubegrensede mønstre over store eller tette grafer kan treffe begrensninger for spørringstid. Se Nåværende begrensninger.
Tell relasjoner per enhet
Bruk GROUP BY den count(*) til å telle hvor mange relasjoner hver enhet har.
Tell hvor mange venner hver person har, ordnet fra flest til færrest:
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
Tell hvor mange ansatte som jobber i hvert selskap:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Finn felles forbindelser
Å gjenbruke en variabel i to deler av et mønster skaper en implisitt «samme node»-begrensning. Bruk denne begrensningen for å finne enheter som er koblet sammen gjennom en delt tredje enhet.
Finn par av personer som begge kjenner samme person:
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
Finn par av personer som jobber i samme selskap:
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
Tips
Betingelsen WHERE a.id < b.id forhindrer at duplikatpar (Alice–Bob og Bob–Alice) dukker opp i resultatene.
Finn entiteter uten relasjoner
Bruk OPTIONAL MATCH det etterfulgt av en nullsjekk for å finne noder som ikke har noen matchende relasjon.
Finn folk som ikke jobber i noe selskap:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Finn innlegg uten kommentarer:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Finn enheter med mange forbindelser
Kombiner GROUP BY og FILTER identifiser svært sammenkoblede noder. Denne metoden er nyttig for å finne hubs eller avvik.
Finn folk med mer enn 10 venner:
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 fungerer som HAVING i SQL. Den filtrerer på det aggregerte resultatet, ikke de individuelle radene.