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.
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.
Durch das Filtern werden die Ergebnisse auf die Zeilen beschränkt, die wichtig sind. Aggregation fasst diese Zeilen in Zählungen, Summen und Mittelwerte zusammen. In diesem Artikel erfahren Sie, wie Sie beide Techniken in GQL-Abfragen auf Graph in Microsoft Fabric anwenden.
Beispiele verwenden das Beispiel-Dataset für soziale Netzwerke. Eine vollständige Referenz zu GQL-Anweisungen und -Ausdrücken 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
MATCHundRETURNAbfragen. Siehe GQL-Sprachhandbuch.
Filtern von Zeilen mit FILTER
Wird verwendet FILTER , um nur die Zeilen beizubehalten, die eine Bedingung erfüllen. Platzieren Sie FILTER nach MATCH, um die übereinstimmenden Ergebnisse einzuschränken.
Die folgende Abfrage gibt alle Frauen mit ihrem Namen und Geburtstag zurück:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Kombinieren Sie mehrere Bedingungen mit AND und OR. Die folgende Abfrage gibt beispielsweise die Namen aller Frauen zurück, die vor 1990 geboren wurden:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tip
Um eine bessere Leistung zu erzielen, filtern Sie während des Musterabgleichs mit einer Inlineklausel WHERE und nicht in einer separaten FILTER Anweisung. Siehe Filter während des Musterabgleichs.
Filtern während des Musterabgleichs
Inlineklauseln WHERE innerhalb eines MATCH Musters beschränken, welche Knoten und Kanten abgeglichen werden, bevor Ergebnisse erzeugt werden. Dieser Ansatz ist effizienter als eine FILTER Klausel nach dem Abgleich, da die Abfrage-Engine Zeilen früher aussondert.
Um beispielsweise Personen zu finden, die vor 1994 geboren wurden, zusammen mit dem Unternehmen, in dem sie arbeiten, die Ergebnisse auf Unternehmen beschränken, deren Name mit "A" beginnt:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filtere die Kanten-Eigenschaften auf die gleiche Weise. Um beispielsweise nur Personen zurückzugeben, die 2000 oder später bei einem Unternehmen ihre Arbeit begonnen haben:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Weitere Informationen zum Leistungsunterschied zwischen Inline- und Nachabgleichsfilterung finden Sie unter Optimieren der GQL-Abfrageleistung.
Behandlung von Nullwerten in Filtern
GQL verwendet dreiwertige Logik: Prädikate werden als TRUE, FALSE oder UNKNOWN bewertet. Wenn ein Eigenschaftswert NULL ist, geben Vergleiche UNKNOWN zurück.
FILTER wird als nicht übereinstimmend betrachtet, sodass die Zeile ausgeschlossen wird.
Verwenden Sie IS NULL und IS NOT NULL, um explizit auf Nullwerte zu testen.
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Verwenden Sie coalesce(), um einen Standardwert heranzuziehen, wenn eine Eigenschaft möglicherweise null sein kann.
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Vorsicht
NULL = NULL ergibt UNKNOWN, nicht TRUE. Verwenden Sie IS NULL immer, um auf Nullwerte zu testen, nicht auf Gleichheit.
Aggregieren von Ergebnissen mit RETURN
Verwenden Sie Aggregatfunktionen, RETURN um Ihre Ergebnisse zusammenzufassen. GQL unterstützt count(), sum(), , avg(), min()und max().
Um beispielsweise alle Personen im Diagramm zu zählen:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Um unterschiedliche Werte zu zählen, z. B. wie viele unterschiedliche Unternehmen Mitarbeiter beschäftigen:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Gruppieren von Ergebnissen mit GROUP BY
Verwenden Sie GROUP BY in RETURN, um Zeilen nach gemeinsamen Werten zu gruppieren und Aggregate innerhalb jeder Gruppe zu berechnen. Diese Gruppierung ist die GQL-Entsprechung von SQL GROUP BY.
Beispielsweise, um Mitarbeiter pro Unternehmen zu zählen:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Gruppieren Sie nach mehreren Spalten, und berechnen Sie mehrere Aggregate gleichzeitig. Brechen Sie beispielsweise die Anzahl der Personen und die Geburtstagsspanne nach Geschlecht und Browser herunter und geben Sie die 10 häufigsten Kombinationen zurück:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
Alle nicht aggregierten Ausdrücke in RETURN müssen in GROUP BYangezeigt werden. Ausdrücke, die nicht in GROUP BY sind, müssen eine Aggregatfunktion verwenden.
Sortieren und Einschränken aggregierter Ergebnisse
Verwenden Sie ORDER BY, LIMIT und GROUP BY zusammen, um die wichtigsten N-Ergebnisse zu finden.
So finden Sie beispielsweise die fünf wichtigsten Städte nach der Anzahl der Einwohner:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Von Bedeutung
ORDER BY vor LIMIT. **
LIMIT wird immer auf die bereits sortierte Ergebnismenge angewendet.
Verwenden von CASE für bedingte Werte in Ergebnissen
Verwenden Sie CASE/WHEN/THEN/ELSE, um bedingte Werte in RETURN oder LET zu berechnen.
Beispielsweise, um Personen basierend auf ihrem Geburtsjahr in Epochen zu kategorisieren:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era