Algemene GQL-query's schrijven in Microsoft Fabric

Note

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

Dit artikel bevat praktische GQL-querypatronen voor algemene grafiektaken in Microsoft Fabric: buren zoeken, multihop-verbindingen doorlopen, gedeelde verbindingen identificeren, relaties tellen en entiteiten zonder verbindingen zoeken.

Voorbeelden maken gebruik van de voorbeeldgegevensset voor sociale netwerken. Raadpleeg de GQL-taalhandleiding voor volledige taalreferenties.

Prerequisites

  • Een grafiekitem met gegevens geladen. Als u nog niet eerder met grafieken werkt, voltooit u eerst de zelfstudie .
  • Bekendheid met basis MATCH en RETURN query's. Zie de GQL-taalhandleiding.

Directe buren zoeken

Retourneer alle knooppunten die zijn verbonden met een beginknooppunt met één hop.

Zoek iedereen die een specifieke persoon kent:

MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName

Zoek alle bedrijven op bij wie een persoon heeft gewerkt:

MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url

Vrienden van vrienden zoeken (multihop)

Gebruik patronen met variabele lengte met {min,max} om meer dan één hop te doorlopen.

Vind mensen op twee stappen afstand - vrienden van Alices vrienden die zij niet direct kent.

MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100

Iedereen vinden die bereikbaar is binnen drie graden:

MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100

Tip

Stel altijd een bovengrens in voor doorkruising met variabele lengte. Onbegrensde patronen in grote of dichte grafieken kunnen de time-outlimieten voor query's bereiken. Zie Huidige beperkingen.

Relaties per entiteit tellen

Gebruik GROUP BY met count(*) om te tellen hoeveel relaties elke entiteit heeft.

Tel hoeveel vrienden elke persoon heeft, van de meeste naar de minste:

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

Tel hoeveel werknemers bij elk bedrijf werken:

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

Gedeelde verbindingen zoeken

Als u een variabele in twee delen van een patroon opnieuw gebruikt, wordt een impliciete beperking voor hetzelfde knooppunt gemaakt. Gebruik deze beperking om entiteiten te vinden die zijn verbonden via een gedeelde derde entiteit.

Zoek paren van personen die beide dezelfde persoon kennen:

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

Zoek paren van personen die bij hetzelfde bedrijf werken:

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

De WHERE a.id < b.id voorwaarde voorkomt dat dubbele paren (Alice–Bob en Bob–Alice) worden weergegeven in de resultaten.

Entiteiten zonder relaties zoeken

Gebruik OPTIONAL MATCH gevolgd door een null-controle om knooppunten te vinden die geen overeenkomende relatie hebben.

Personen zoeken die niet werken bij een enkel bedrijf:

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

Berichten zoeken zonder opmerkingen:

MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100

Entiteiten zoeken met veel verbindingen

Combineer GROUP BY en FILTER identificeer sterk verbonden knooppunten. Deze methode is nuttig voor het vinden van hubs of uitschieters.

Personen zoeken met meer dan 10 vrienden:

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 na GROUP BY werkt als HAVING in SQL. Het filtert op het geaggregeerde resultaat, niet op de afzonderlijke rijen.