Schreiben von Diagrammmusterabfragen 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.

Mit dem Diagrammmusterabgleich können Sie die Struktur der Daten beschreiben, die Sie mithilfe intuitiver visueller Syntax finden möchten. Anstatt Tabellen zu verknüpfen, schreiben Sie Muster, die wie die Beziehungen selbst aussehen – Knoten, die durch Ränder verbunden sind. In diesem Artikel erfahren Sie, wie Sie GQL-Musterabfragen für allgemeine Szenarien in Diagrammen in Microsoft Fabric schreiben.

In den Beispielen wird das Beispiel-Dataset für soziale Netzwerke verwendet. Eine vollständige Mustersyntaxreferenz finden Sie unter GQL-Diagrammmuster.

Voraussetzungen

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

Direkte Beziehungen abgleichen

Ein einfaches Muster entspricht einem Knotentyp, einem bestimmten Edgetyp und einem anderen Knotentyp. Die Syntax sieht wie ein Diagramm der Beziehung aus.

Um beispielsweise bis zu 100 Personen zu finden, die mit dem Unternehmen gekoppelt sind, bei dem sie arbeiten:

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

Verwenden Sie ein ungerichtetes Kantenmuster, wenn Sie die Richtung nicht kennen oder es Ihnen egal ist. Um beispielsweise bis zu 100 gegenseitige Bekannte zu finden, unabhängig davon, wer die Verbindung initiiert hat:

MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100

Note

Graph unterstützt derzeit nicht das Erstellen von nicht geleiteten Kanten, Sie können jedoch Ränder in beliebiger Richtung mithilfe der -[:label]- Syntax abfragen.

Filtermuster mit Inline WHERE

Platzieren Sie WHERE innerhalb des Musters, um Knoten und Kanten so zu filtern, wie sie übereinstimmen. Dieser Ansatz ist effizienter als eine nachträgliche Filterung.

Um beispielsweise Personen zu finden, die vor 1990 geboren wurden, die in einem Unternehmen arbeiten, dessen Name mit "A" beginnt:

MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name

Filtern Sie nach Edgeeigenschaften, um einzuschränken, welche Beziehungen übereinstimmen. Um beispielsweise nur Personen zurückzugeben, die 2010 oder später in einem Unternehmen zu arbeiten begonnen haben.

MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom

Anpassung von Multi-Hop-Beziehungen

Verwenden Sie Muster mit variabler Länge, um mehrere Sprünge in einem Ausdruck zu überwinden. Geben Sie die minimale und maximale Anzahl von Hops mit der Syntax {min,max} an.

Um beispielsweise bis zu 100 Menschen zu finden, die innerhalb von zwei bis vier Grad Freundschaft von Alice erreichbar sind:

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

Um bis zu 100 direkte und zweitgradige Verbindungen (einen oder zwei Sprünge) von Alice zu finden:

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

Steuern der Durchquerung mit Pfadmodi

Standardmäßig verwendet GQL den TRAIL Modus, der verhindert, dass dieselbe Kante mehrmals durchlaufen wird. Verwenden Sie Pfadmodi explizit, wenn Sie unterschiedliche Garantien benötigen.

Pfadmodus Behavior Verwenden, wenn ...
WALK Ermöglicht wiederholte Knoten und Kanten Sie möchten eine rohe Traversierung ohne Einschränkungen. Selten erforderlich; hauptsächlich nützlich für explorative Abfragen.
TRAIL Keine wiederholten Kanten (Standard) Sie möchten vermeiden, dieselbe Beziehung nachzuverfolgen, aber derselbe Knoten kann durch verschiedene Beziehungen auftreten. Dies eignet sich gut für die meisten Traversalabfragen.
SIMPLE Keine wiederholten Knoten außer Start und Ende Sie möchten, dass kein Knoten mehr als einmal innerhalb eines Pfads vorkommt, aber Pfade zulassen, die sich wieder zum Anfang schließen. Nützlich zum Erkennen von Schleifen.
ACYCLIC Keine wiederholten Knoten überhaupt Sie müssen sicherstellen, dass kein Knoten mehr als einmal im Pfad angezeigt wird. Wird für strenge Hierarchien, Linien oder alle Durchgänge verwendet, bei denen das Erneute Anarbeiten eines Knotens zu falschen Ergebnissen führen würde.

WALK ist der restriktivste Modus und ACYCLIC ist der restriktivste. TRAIL ist der Standardwert und eignet sich gut für die meisten Abfragen. Verwenden Sie einen restriktiveren Modus nur, wenn ihr Anwendungsfall dies erfordert.

Um den Unterschied zu veranschaulichen, betrachten Sie den Pfad Alice → Bob → Carol → Bob:

  • WALK – ermöglicht diesen Pfad. Knoten und Kanten können frei wiederholt werden.
  • TRAIL – ermöglicht diesen Pfad. Bob erscheint zweimal, aber jede benutzte Kante ist eine andere Beziehung (Alice→Bob und Carol→Bob sind unterschiedliche Kanten), was bedeutet, dass keine Kante wiederholt wird.
  • EINFACH – blockiert diesen Pfad. Bob wird mehr als einmal angezeigt, und SIMPLE ermöglicht es nur, einen Knoten zu wiederholen, wenn er sowohl der Anfang als auch das Ende des Pfads (ein geschlossener Zyklus) ist. Hier ist Alice der Start und Bob ist das Ende, sodass keine Ausnahme gilt.
  • ACYCLIC – blockiert diesen Pfad. Bob erscheint mehr als einmal irgendwo im Pfad.

Das folgende Beispiel zeigt, wie Sie TRAIL verwenden können, um zu zählen, wie viele Pfade unterschiedlicher Art zu jedem der ersten 100 Menschen führen, die innerhalb von vier Sprüngen im Netzwerk von Alice erreichbar sind.

MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100

Verwenden Sie ACYCLIC , um bis zu 100 Personen zurückzugeben, die von Alice innerhalb von vier Hops erreichbar sind, wobei jede Person im Pfad einzigartig ist.

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

Tip

Legen Sie bei großen Diagrammen immer eine obere Grenze für Muster mit variabler Länge ({1,4} anstelle von {1,}). Uneingeschränkte Durchläufe über dichte Graphen hinweg können Abfrage-Timeout-Grenzen erreichen. Weitere Informationen finden Sie unter "Aktuelle Einschränkungen".

Verwenden von Variablenwiederverwendung zum Ausdrücken gemeinsamer Entitäten

Durch die Wiederverwendung derselben Variablen in zwei Teilen eines Musters wird eine implizite Gleichheitseinschränkung erstellt. Beide Verweise müssen mit demselben Knoten übereinstimmen. Mit dieser Technik können Sie zum Ausdruck bringen, „Entitäten zu finden, die über eine gemeinsame dritte Entität verbunden sind".

Um beispielsweise bis zu 100 Personenpaare zu finden, die einander kennen und am gleichen Unternehmen arbeiten:

MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100

Die Variable c wird für beide workAt Ziele wiederverwendet, sodass die Abfrage nur Paare zurückgibt, bei denen beide Personen einander kennen und bei demselben Unternehmen arbeiten.

So finden Sie bis zu 100 Paare von Personen, die beide denselben Beitrag gefällten:

MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100

Tip

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

Kombinieren mehrerer Muster

Auflisten mehrerer Muster in einem einzelnen MATCH, durch Kommas getrennt. Alle Muster müssen mindestens eine Variable gemeinsam nutzen, damit sie ordnungsgemäß verknüpft werden.

Um beispielsweise bis zu 100 Personen zusammen mit ihrem Arbeitsplatz und der Stadt zu finden, in der sie leben:

MATCH (p:Person)-[:workAt]->(c:Company),
      (p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100

Die freigegebene Variable p verbindet die beiden Muster. Jede Ergebniszeile stellt eine Person mit ihrem Unternehmen und ihrer Stadt dar.

Optionale Beziehungen abgleichen

Verwenden Sie OPTIONAL MATCH , wenn eine Beziehung für jeden Knoten möglicherweise nicht vorhanden ist. Zeilen ohne Übereinstimmung werden mit NULL Werten beibehalten, ähnlich einem SQL LEFT JOIN.

Geben Sie beispielsweise bis zu 100 Personen mit ihrem Firmennamen zurück, einschließlich Personen ohne Arbeitgeber (d. h., die für die Unternehmensspalte NULL zurückkehren):

MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100

Verwenden Sie nach IS NULL , OPTIONAL MATCH um bis zu 100 Personen zu finden, 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