Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Bemærkning
Denne funktion er i øjeblikket tilgængelig som offentlig prøveversion. Denne prøveversion leveres uden en serviceniveauaftale og anbefales ikke til produktionsarbejdsbelastninger. Visse funktioner understøttes muligvis ikke eller kan have begrænsede funktioner. For mere information, se Supplerende Brugsvilkår for Microsoft Azure Forhåndsvisninger.
Denne artikel giver praktiske GQL-forespørgselsmønstre for almindelige grafopgaver i Microsoft Fabric: at finde naboer, traversere multihop-forbindelser, identificere delte forbindelser, tælle relationer og finde enheder uden forbindelser.
Eksempler bruger datasættet fra sociale netværk. For fuld sprogreference, se GQL-sprogvejledningen.
Forudsætninger
- Et grafelement med data indlæst. Hvis du er ny til graf, så gennemfør tutorialen først.
- Fortrolighed med grundlæggende
MATCHogRETURNforespørgsler. Se GQL-sprogvejledningen.
Find direkte naboer
Returner alle noder, der er forbundet til en startnode, med ét hop.
Find alle, en bestemt person kender:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Find alle de virksomheder, en person har arbejdet for:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Find venners venner (multi-hop)
Brug mønstre med variabel længde til {min,max} at krydse mere end ét hop.
Find folk to hup væk – venner af Alices venner, som Alice ikke kender direkte:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Find alle tilgængelige inden for tre grader:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tip
Sæt altid en øvre grænse for variabel længde af traversering. Ubegrænsede mønstre på tværs af store eller tætte grafer kan ramme grænsen for forespørgsels-timeout. Se Nuværende begrænsninger.
Optæl relationer pr. enhed
Brug GROUP BY med count(*) til at tælle, hvor mange relationer hver enhed har.
Tæl 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
Tæl hvor mange medarbejdere der arbejder i hver virksomhed:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Find fælles forbindelser
Genbrug af en variabel i to dele af et mønster skaber en implicit "samme node"-begrænsning. Brug denne begrænsning til at finde enheder, der er forbundet gennem en delt tredje enhed.
Find par af personer, der begge kender den 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
Find par af personer, der arbejder i samme virksomhed:
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
Tip
Tilstanden WHERE a.id < b.id forhindrer, at duplikerede par (Alice–Bob og Bob–Alice) optræder i resultaterne.
Find enheder uden relationer
Brug OPTIONAL MATCH efterfulgt af et null-tjek for at finde noder, der ikke har nogen matchende relation.
Find folk, der ikke arbejder i nogen virksomhed:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Find opslag uden kommentarer:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Find enheder med mange forbindelser
Kombiner GROUP BY og FILTER identificer højt forbundne noder. Denne metode er nyttig til at finde knudepunkter eller outliers.
Find folk med mere end 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
Bemærkning
FILTER After GROUP BY fungerer som HAVING i SQL. Det filtrerer på det aggregerede resultat, ikke de enkelte rækker.