Schreiben allgemeiner GQL-Abfragen in Microsoft Fabric

Note

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.

Dieser Artikel enthält praktische GQL-Abfragemuster für allgemeine Diagrammaufgaben in Microsoft Fabric: Suchen von Nachbarn, Durchlaufen von Multihopverbindungen, Identifizieren freigegebener Verbindungen, Zählen von Beziehungen und Suchen von Entitäten ohne Verbindungen.

Beispiele verwenden das Beispiel-Dataset für soziale Netzwerke. Vollständige Sprachreferenz finden Sie im GQL-Sprachhandbuch.

Voraussetzungen

  • Ein Diagrammelement mit geladenen Daten. Wenn Sie mit Graph noch nicht vertraut sind, führen Sie zuerst das Tutorial aus.
  • Vertrautheit mit grundlegenden MATCH und RETURN Abfragen. Siehe GQL-Sprachhandbuch.

Direkte Nachbarn finden

Gibt alle Knoten zurück, die durch einen Hop mit einem Startknoten verbunden sind.

Suchen Sie alle Personen, die eine bestimmte Person kennt:

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

Suchen Sie alle Unternehmen, an der eine Person gearbeitet hat:

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

Freunde von Freunden suchen (Multi-Hop)

Verwenden Sie {min,max} mit Mustern variabler Länge, um mehrere Sprünge zu durchlaufen.

Finden Sie Personen zwei Schritte entfernt – Freunde von Alices Freunden, die Alice nicht direkt kennt:

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

Finden Sie alle innerhalb von drei Grad erreichbaren Personen:

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

Tip

Legen Sie immer eine obere Grenze für die Durchquerung variabler Länge fest. Unbeschränkte Muster über große oder dichte Graphen hinweg können zu Abfrage-Timeout-Limits führen. Weitere Informationen finden Sie unter "Aktuelle Einschränkungen".

Zählen von Beziehungen pro Entität

Verwenden Sie GROUP BY zusammen mit count(*), um zu zählen, wie viele Beziehungen jede Entität hat.

Zählen Sie, wie viele Freunde jede Person hat, sortiert von den meisten bis zu wenigen:

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

Zählen Sie, wie viele Mitarbeiter bei jedem Unternehmen arbeiten:

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

Suchen nach gemeinsamen Verbindungen

Durch die Wiederverwendung einer Variablen in zwei Teilen eines Musters wird eine implizite Einschränkung "gleicher Knoten" erstellt. Verwenden Sie diese Bedingung, um Entitäten zu finden, die über eine gemeinsame dritte Entität verbunden sind.

Suchen Sie Paare von Personen, die beide die gleiche Person 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

Suchen Sie Paare von Personen, die im selben Unternehmen arbeiten:

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

Die WHERE a.id < b.id Bedingung verhindert, dass doppelte Paare (Alice-Bob und Bob-Alice) in Ergebnissen angezeigt werden.

Suchen nach Entitäten ohne Beziehungen

Verwenden Sie OPTIONAL MATCH gefolgt von einer NULL-Prüfung, um Knoten zu finden, die keine übereinstimmende Beziehung haben.

Suchen Sie Personen, die nicht in einem Unternehmen arbeiten:

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

Beiträge ohne Kommentare suchen:

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

Suchen nach Entitäten mit vielen Verbindungen

Kombinieren Sie GROUP BY und FILTER, um hoch verbundene Knoten zu identifizieren. Diese Methode ist nützlich, um Hubs oder Ausreißer zu finden.

Personen mit mehr als 10 Freunden finden:

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 nach GROUP BY funktioniert wie HAVING in SQL. Sie filtert nach dem aggregierten Ergebnis, nicht nach den einzelnen Zeilen.