Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
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 Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.
Diagrammmuster sind kernbausteine Ihrer GQL-Abfragen. Sie beschreiben die Im Diagramm gesuchten Strukturen mithilfe von Knoten und Kanten auf intuitive, visuelle Weise. Stellen Sie sich Diagrammmuster als Vorlagen vor, die vom Abfragemodul mit den tatsächlichen Daten in Ihrem Diagramm abgeglichen werden sollen.
Von Bedeutung
In diesem Artikel wird ausschließlich das Beispieldiagramm-Dataset für soziale Netzwerke verwendet.
Einfache Elementmuster
Einfache Elementmuster helfen Ihnen beim Abgleichen einzelner Knoten und Kanten aus Ihrem Diagramm, die bestimmte Anforderungen erfüllen. Diese Muster bilden die Grundlage für komplexere Musterabgleiche.
Einfache Knotenmuster
Ein Knotenmuster gibt die Beschriftungen und Eigenschaften an, die ein Knoten erfüllen muss:
(:City { name: "New York" })
Dieses Muster gleicht alle Knoten ab, die sowohl die als Place die City Beschriftungen aufweisen (die durch den & Operator angegeben sind) und deren name Eigenschaft gleich ist"New York". Diese Spezifikation der erforderlichen Bezeichnungen und Eigenschaften wird als Füllfeld des Knotenmusters bezeichnet.
Schlüsselkonzepte:
-
Bezeichnungsabgleich: Verwenden,
&um mehrere Bezeichnungen zu erfordern. - Eigenschaftenfilterung: Geben Sie genaue Werte an, die Eigenschaften übereinstimmen müssen.
- Flexibler ("kovarianter") Abgleich: Übereinstimmende Knoten können mehr Bezeichnungen und Eigenschaften aufweisen, die über die angegebenen hinausgehen.
Hinweis
Graphenmodelle mit mehreren Elementlabels werden noch nicht unterstützt (bekanntes Problem).
Einfache Kantenmuster
Edgemuster sind komplexer als Knotenmuster. Sie geben nicht nur einen Füllstoff an, sondern verbinden auch ein Quellknotenmuster mit einem Zielknotenmuster. Edgemuster beschreiben Anforderungen sowohl am Edge als auch an den Endpunkten:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
Die Pfeilrichtung -[...]-> ist wichtig – sie bestimmt (:Person) als Quellknotenmuster und (:Comment) als Zielknotenmuster. Das Verständnis der Edgerichtung ist entscheidend für die ordnungsgemäße Abfrage Ihres Diagramms.
Entsprechendes gespiegeltes Muster:
Sie können den Pfeil kippen und die Knotenmuster austauschen, um das entsprechende gespiegelte Kantenmuster zu erstellen:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
Dieses Muster findet die gleichen Beziehungen, aber aus der entgegengesetzten Perspektive.
Alle gerichteten Kantenmuster
Wenn die Richtung eines Diagrammrands für Ihre Abfrage nicht wichtig ist, können Sie sie nicht angegeben lassen, indem Sie ein beliebiges gerichtetes Randmuster erstellen:
(:Song)-[:inspired]-(:Movie)
Dieses Muster entspricht denselben Rändern wie (:Song)-[:inspired]->(:Movie) und (:Movie)-[:inspired]->(:Song) kombiniert, unabhängig davon, welcher Knoten die Quelle ist und welches Ziel ist (dieses Beispiel stammt nicht vom Diagrammtyp für soziale Netzwerke).
Verknüpfungen für Graph-Randmuster
GQL bietet praktische Tastenkombinationen für allgemeine Edgemuster, um Ihre Abfragen präziser zu gestalten:
-
()->()steht für()-[]->()(gerichtete Kante mit beliebigem Etikett) -
()<-()steht für()<-[]-()(gerichteter Rand in umgekehrter Richtung mit beliebiger Beschriftung) -
()-()steht für()-[]-()(beliebige Kante mit beliebiger Beschriftung)
Diese Tastenkombinationen können nützlich sein, wenn Sie sich um Konnektivität, aber nicht um den spezifischen Graph-Randtyp kümmern.
Bezeichnungsausdrücke
Muster können komplexe Anforderungen an die Bezeichnungen übereinstimmener Knoten und Kanten ausdrücken.
Example:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
Dies zählt die Anzahl der isLocatedIn Ränder, die Knoten verbinden Person oder Organization-aber nicht-Company Knoten (die immer University Knoten im Schema des sozialen Netzwerks sind) mit City oder Country Knoten.
Syntax:
| Syntax | Bedeutung |
|---|---|
A&B |
Bezeichnungen müssen sowohl A als auch B enthalten. |
A|B |
Bezeichnungen müssen mindestens einen von A oder B enthalten. |
!A |
Bezeichnungen müssen A ausschließen. |
Verwenden Sie außerdem die Klammer, um die Reihenfolge der Beschriftungsausdrucksauswertung zu steuern. Hat standardmäßig ! die höchste Rangfolge und & hat eine höhere Rangfolge als |. Daher !A&B|C|!D ist dasselbe wie ((!A)&B)|C|(!D).
Bindungsvariablen
Mithilfe von Variablen können Sie auf übereinstimmende Diagrammelemente in anderen Teilen Ihrer Abfrage verweisen. Das Verständnis der Bindung und Verwendung von Variablen ist für die Erstellung leistungsstarker Abfragen unerlässlich.
Bindungselementvariablen
Sowohl Knoten- als auch Edgemuster können übereinstimmende Knoten und Kanten für spätere Verweise an Variablen binden.
(p:Person)-[w:workAt]->(c:Company)
In diesem Muster p ist an übereinstimmende Person Knoten gebunden, w an übereinstimmende workAt Kanten und c an übereinstimmende Company Knoten.
Variable Wiederverwendung für strukturelle Einschränkungen:
Wenn Sie dieselbe Variable in einem Muster mehrmals wiederverwenden, wird eine Einschränkung der Struktur der Übereinstimmungen ausgedrückt. Jedes Vorkommen derselben Variablen muss immer an dasselbe Diagrammelement in einer gültigen Übereinstimmung gebunden werden. Die variable Wiederverwendung ist leistungsfähig, um komplexe strukturelle Anforderungen auszudrücken.
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Das Muster findet Person Knoten x , die y einander kennen und an demselben CompanyArbeiten arbeiten, das an die Variable cgebunden ist. Durch die Wiederverwendung wird c sichergestellt, dass beide Personen im selben Unternehmen arbeiten.
Muster-Prädikate mit Elementvariablen:
Mit Bindungselementvariablen können Sie Knoten- und Edgemuster-Prädikate angeben. Anstatt nur einen Füllstoff mit exakten Eigenschaftswerten wie { name: "New York, USA" }z. B. bereitzustellen, kann ein Füllfeld ein Prädikat angeben, das für jedes Kandidatenelement ausgewertet wird. Das Muster stimmt nur überein, wenn das Prädikat zu TRUE:
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
Das Randmuster findet Personen, die sich seit dem 1. Januar 2000 gegenseitig kennen, und verwendet eine flexible Bedingung anstelle einer exakten Übereinstimmung.
Hinweis
Edgemustervariablen binden immer an den einzelnen Rand im Edgemuster-Prädikat, auch bei Verwendung von Mustern mit variabler Länge. Dies kann hilfreich sein, wenn Sie nicht die größten Gruppenlistenvariablen zum Ausführen eines Nachfilters ausführen müssen. Siehe Bind Variable-Length-Muster-Edgevariablen.
Erweiterte Muster-Prädikattechniken:
Muster-Prädikate bieten leistungsstarke Inlinefilterfunktionen, die die Lesbarkeit von Abfragen verbessern können:
-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.age > 30 AND p.department = 'Engineering')
-[:workAt]->
(c:Company WHERE c.revenue > 1000000 AND c.location = 'Seattle')
-- Complex edge predicates with calculations
MATCH (p1:Person)-[w:workAt WHERE w.start_date < ZONED_DATETIME('2020-01-01T00:00:00Z')
AND w.salary > 75000]-(c:Company)
-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.active = TRUE AND c.public = TRUE
-- Filter during matching and after
MATCH (p:Person WHERE p.department = 'Sales')-[:workAt]->(c:Company)
WHERE p.quota_achievement > 1.2 AND c.revenue > c.revenue_target
Tipp
Die Verwendung von Muster-Prädikaten, wenn die Bedingungen hochgradig selektiv sind, kann die Größe der zwischengeschalteten Ergebnisse verringern.
Bindungspfadvariablen
Sie können auch einen übereinstimmenden Pfad an eine Pfadvariable zur weiteren Verarbeitung binden oder die vollständige Pfadstruktur an den Benutzer zurückgeben:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Hier ist an einen Pfadwert gebunden, p der die vollständige übereinstimmende Pfadstruktur darstellt, einschließlich Der Referenzwerte für alle Knoten und Kanten in der angegebenen Reihenfolge.
Gebundene Pfade können entweder an den Benutzer zurückgegeben oder mit Funktionen wie NODES oder EDGESweiterverarbeitet werden:
MATCH p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
LET path_edges = edges(p)
RETURN path_edges, size(path_edges) AS num_edges
GROUP BY path_edges
Verfassenmuster
Reale Abfragen erfordern häufig komplexere Muster als einfache Knoten-Edge-Knotenstrukturen. GQL bietet verschiedene Möglichkeiten zum Verfassen von Mustern für komplexe Diagramm-Traversale.
Pfadmuster zum Verfassen
Pfadmuster können durch Verketten einfacher Knoten- und Randmuster erstellt werden, um längere Durchläufe zu erstellen.
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Das Muster durchläuft eine Person durch ihre sozialen und beruflichen Verbindungen, um zu finden, wo sich das Unternehmen ihres Kollegen befindet.
Stückweise Musterkonstruktion: Sie können Pfadmuster auch inkrementeller erstellen, wodurch komplexe Muster leichter zu lesen und zu verstehen sind:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Bei diesem Ansatz wird die gleiche Durchquerung in logische Schritte unterteilt, wodurch es einfacher zu verstehen und zu debuggen ist.
Nichtlineare Muster verfassen
Die resultierende Form eines Musters muss kein linearer Pfad sein. Sie können komplexere Strukturen wie sternförmige Muster abgleichen, die von einem zentralen Knoten ausstrahlen:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
Das Muster findet eine Person zusammen mit ihren Bildungs-, Beschäftigungs- und Inhaltseinstellungen auf einmal – eine umfassende Profilabfrage.
Pfade abgleichen
In komplexen Mustern ist es oft unerwünscht, denselben Rand mehrmals zu durchlaufen. Die Wiederverwendung von Edge wird wichtig, wenn das tatsächliche Diagramm Zyklen enthält, die zu unendlichen oder übermäßig langen Pfaden führen können. Um die Wiederverwendung von Kanten zu verarbeiten, unterstützt Graph in Microsoft Fabric den Übereinstimmungsmodus TRAIL .
Durch das Präfix eines Pfadmusters mit dem Schlüsselwort TRAIL werden alle Übereinstimmungen verworfen, die denselben Rand mehrmals binden:
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
Durch die Verwendung TRAILerzeugt das Muster nur Übereinstimmungen, bei denen alle Kanten unterschiedlich sind. Selbst wenn c = a der Pfad einen Zyklus in einer bestimmten Übereinstimmung bildet, e3 wird daher niemals an denselben Rand gebunden wie e1.
Der TRAIL Modus ist unerlässlich, um endlose Schleifen zu verhindern und sicherzustellen, dass Ihre Abfragen aussagekräftige, nicht umwundende Pfade zurückgeben.
Verwenden von Mustern mit variabler Länge
Muster mit variabler Länge sind leistungsstarke Konstrukte, mit denen Sie Pfade unterschiedlicher Länge finden können, ohne sich wiederholende Musterspezifikationen zu schreiben. Sie sind für das Durchlaufen von Hierarchien, sozialen Netzwerken und anderen Strukturen unerlässlich, bei denen die optimale Pfadlänge im Voraus nicht bekannt ist.
Gebundene Variablenlängenmuster
Von Bedeutung
Gebundene Muster mit variabler Länge unterstützen derzeit nur eine maximale Obergrenze von 8. Weitere Informationen finden Sie im Artikel zu den aktuellen Einschränkungen.
Viele gängige Diagrammabfragen erfordern mehrmals dasselbe Edgemuster. Anstatt ausführliche Muster wie:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
Sie können die prägnantere Syntax variabler Länge verwenden:
(:Person)-[:knows]->{3}(:Person)
Dies {3} gibt an, dass das -[:knows]-> Kantenmuster genau dreimal wiederholt werden soll.
Flexible Wiederholungsbereiche: Um mehr Flexibilität zu gewährleisten, können Sie sowohl eine untere Grenze als auch eine obere Grenze für die Wiederholung angeben:
(:Person)-[:knows]->{1, 3}(:Person)
Dieses Muster findet direkte Freunde, Freunde von Freunden und Freunden von Freunden in einer einzigen Abfrage.
Hinweis
Die untere Grenze kann auch sein 0. In diesem Fall werden keine Kanten abgeglichen, und das gesamte Muster stimmt nur dann überein, wenn die beiden Endpunktknotenmuster mit demselben Knoten übereinstimmen.
Beispiel:
(p1:Person)-[r:knows WHERE NOT p1=p2]->{0,1}(p2:Person)
Dieses Muster passt zu Paaren verschiedener Personen, die sich kennen, aber auch mit derselben Person wie beide p1 und p2 – selbst wenn diese Person sich selbst nicht "kennt".
Wenn keine untere Grenze angegeben wird, wird standardmäßig 0 (Null) verwendet.
Komplexe Kompositionen variabler Länge: Muster mit variabler Länge können Teil größerer, komplexerer Muster sein, wie in der folgenden Abfrage:
MATCH (c1:Comment)<-[:likes]-(p1:Person)-[:knows]-(p2:Person)-[:likes]->(c2:Comment),
(c1:Comment)<-[:replyOf]-{1,3}(m)-[:replyOf]->{1,3}(c2:Comment)
RETURN *
LIMIT 100
Das Muster findet Paare von Kommentaren, bei denen Personen, die einander kennen, verschiedene Kommentare gefällt haben, und diese Kommentare werden über Antwortketten von jeweils 1 bis 5 Ebenen verbunden.
Binden variabler Muster-Randvariablen
Wenn Sie ein Randmuster mit variabler Länge binden, ändern sich der Wert und typ der Edgevariable je nach Bezugskontext. Das Verständnis dieses Verhaltens ist entscheidend für die ordnungsgemäße Verarbeitung von Übereinstimmungen mit variabler Länge:
Zwei Bezugsgrade:
- Innerhalb eines Musters mit variabler Länge: Graph-Randvariablen binden an jede einzelne Kante entlang des übereinstimmenden Pfads (auch als "Singleton Grad der Referenz" bezeichnet)
- Außerhalb eines Musters mit variabler Länge: Graph-Randvariablen binden an die Abfolge aller Kanten entlang des übereinstimmenden Pfads (auch als "Gruppenverweisgrad" bezeichnet)
Beispiel für beide Kontexte:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
Die Auswertung der Edgevariable e erfolgt in zwei Kontexten:
In der
MATCHAnweisung: Die Abfrage findet Ketten von Freunden-von-Freunden-von-Freunden, wo jede Freundschaft seit dem Jahr 2000 gegründet wurde. Beim Musterabgleich wird das Edgemuster-Prädikate.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")einmal für jeden Kandidatenrand ausgewertet. In diesem Zusammenhangeist an einen einzelnen Edgeverweiswert gebunden.In der
RETURNAnweisung: Hier ist an eine (Gruppen)Liste der Edgeverweiswerte in der Reihenfolge gebunden,ein der sie in der übereinstimmenden Kette auftreten. Das Ergebnise[0]ist der erste Edgeverweiswert in jeder übereinstimmenen Kette.
Variable Längen-Musterkantenvariablen in horizontaler Aggregation:
Kantenvariablen, die durch variable Längenmusterabstimmung begrenzt sind, sind Gruppenlisten außerhalb des variablen Längenmusters und können daher in der horizontalen Aggregation verwendet werden.
MATCH (a:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}(b)
RETURN a, b, size(e) AS num_edges
LIMIT 100
Siehe den Abschnitt zur horizontalen Aggregation für weitere Details.