Skriv vanlige GQL-spørringer i Microsoft Fabric

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 MATCH og RETURN spø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.