Teilen über


GQL-Ausdrücke, Prädikate und Funktionen

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.

Mit GQL-Ausdrücken können Sie Berechnungen, Vergleiche und Transformationen für Daten in Ihren Abfragen ausführen. In Kombination mit integrierten Funktionen bieten Ausdrücke leistungsstarke Tools für die Datenverarbeitung, Filterung und Analyse in Diagrammabfragen.

Literale

Literale sind einfache Ausdrücke, die direkt auf den angegebenen Wert ausgewertet werden. Literale jeder Art von Wert werden in GQL-Werten und Werttypen ausführlich erläutert.

Example:

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Ausführliche Literalsyntax für jeden Datentyp finden Sie unter GQL-Werte und Werttypen.

Prädikate

Prädikate sind boolesche Ausdrücke, die häufig zum Filtern von Ergebnissen in GQL-Abfragen verwendet werden. Sie werden als TRUE, FALSEoder UNKNOWN (NULL) ausgewertet.

Vorsicht

Bei Verwendung als Filter behalten Prädikate nur die Elemente bei, für die das Prädikat ausgewertet wird TRUE.

Vergleichsdrädikate

Vergleichen Sie Werte mithilfe dieser Operatoren:

  • = (gleich)
  • <> (nicht gleich)
  • < (kleiner als)
  • > (größer als)
  • <= (kleiner oder gleich)
  • >= (größer oder gleich)

GQL verwendet dreiwertige Logik, bei der Vergleiche mit NULL-Rückgabe UNKNOWN:

Ausdruck Ergebnis
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Spezifisches Vergleichsverhalten finden Sie in der Dokumentation für jeden Werttyp in GQL-Werten und -Werttypen.

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Zahlenkoersionsregeln:

Rangfolge:

  1. Vergleichsausdrücke, die Argumente von ungefähren numerischen Typen umfassen, wandeln alle Argumente in einen ungefähren numerischen Typ um.
  2. Vergleichsausdrücke, die Argumente von signierten und nicht signierten ganzzahligen Typen umfassen, wandeln alle Argumente in einen signierten ganzzahligen Typ um.

Logische Ausdrücke

Kombinieren von Bedingungen mit logischen Operatoren:

  • AND (beide Bedingungen wahr)
  • OR (beide Bedingung true)
  • NOT (Negates-Bedingung)

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Eigenschaftenexistenz-Prädikate

Um zu überprüfen, ob es Immobilien gibt, können Sie folgendes verwenden:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Hinweis

Der Versuch, auf eine bekannte, nicht existierende Eigenschaft zuzugreifen, führt zu einem Syntaxfehler. Der Zugang zu einer potenziell nicht vorhandenen Immobilie bewertet auf null. Die Feststellung, ob eine Eigenschaft bekannt oder potenziell nicht existiert, basiert auf dem Typ des zugegriffenen Knotens oder der Kante.

Mitgliedschafts-Prädikate auflisten

Testen, ob Werte in Listen enthalten sind:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

Zeichenfolgenmuster-Prädikate

Zeichenfolgen mithilfe des Musterabgleichs abgleichen:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

Arithmetische Ausdrücke

Verwenden Sie standardmäßige arithmetische Operatoren mit numerischen Werten:

  • + (Addition)
  • - (Subtraktion)
  • * (Multiplikation)
  • / (Division)

Arithmetische Operatoren folgen allgemeinen mathematischen Konventionen.

Vorrang:

Im Allgemeinen folgen Operatoren etablierten Operatorrangfolgeregeln, z * . B. vor +. Verwenden Sie Klammern, um die Auswertungsreihenfolge nach Bedarf zu steuern.

Example:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Koersionsregeln:

Rangfolge:

  1. Arithmetische Ausdrücke mit Argumenten ungefährer Zahlentypen geben ein Ergebnis eines ungefähren numerischen Typs zurück.
  2. Arithmetische Ausdrücke mit Argumenten von vorzeichenierten und nicht signierten ganzzahligen Typen geben ein Ergebnis eines signierten ganzzahligen Typs zurück.

Example:

LET birth_year = p.birthday / 10000
RETURN birth_year

Eigenschaftenzugriff

Zugreifen auf Eigenschaften mit Punktnotation:

p.firstName
edge.creationDate

Listenzugriff

Zugreifen auf Listenelemente mit nullbasierter Indizierung:

interests[0]    -- first element
interests[1]    -- second element

Integrierte Funktionen

GQL unterstützt verschiedene integrierte Funktionen für die Datenverarbeitung und -analyse.

Aggregatfunktionen

Aggregatfunktionen werden verwendet, um einen Ausdruck über eine Reihe von Zeilen auszuwerten und einen endgültigen Ergebniswert zu erhalten, indem die für jede Zeile berechneten Werte kombiniert werden. Die folgenden Aggregatfunktionen werden für Graph in Microsoft Fabric unterstützt:

  • count(*) - Zählt Zeilen
  • sum(expression) - Summieren numerischer Werte
  • avg(expression) - Mittelwerte numerischer Werte
  • min(expression) - findet minimalen Wert.
  • max(expression) - findet maximaler Wert
  • collect_list(expression) - sammelt Werte in einer Liste.

Im Allgemeinen ignorieren Aggregatfunktionen Nullwerte und geben immer einen Nullwert zurück, wenn keine Materialeingabewerte bereitgestellt werden. Sie können zum Abrufen eines anderen Standardwerts verwenden coalesce : coalesce(sum(expr), 0). Die einzige Ausnahme ist die count Aggregatfunktion, die immer die nicht null angegebenen Werte zählt und 0 zurückgibt, wenn keines vorhanden ist. Wird verwendet count(*) , um auch Nullwerte in die Anzahl einzuschließen.

Aggregatfunktionen werden auf drei verschiedene Arten verwendet:

  • Für Die Berechnung (vertikale) Aggregate über ganze Tabellen
  • Für Die Berechnung (vertikal) aggregierte Untertabellen, die durch einen Gruppierungsschlüssel bestimmt werden
  • Für die Berechnung (horizontal) aggregiert über die Elemente einer Gruppenliste

Vertikale Aggregate:

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

Horizontale Aggregate:

Die horizontale Aggregation berechnet Aggregate über die Elemente von Gruppenlistenvariablen aus Variablenlängenmustern:

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

Horizontale Aggregation hat immer Vorrang vor vertikaler Aggregation. Um eine Gruppenliste in eine reguläre Liste zu konvertieren, verwenden Sie collect_list(edges).

Hinweis

Eine umfassende Abdeckung der Aggregationstechniken, einschließlich der Bindung variabler Länge und der Kombination horizontaler/vertikaler Aggregation, finden Sie unter Advanced Aggregation Techniques.

Zeichenfolgenfunktionen

  • char_length(string) - gibt die Länge der Zeichenfolge zurück.
  • upper(string)- gibt die großgeschriebene Variante der bereitgestellten Zeichenfolge zurück (nur US ASCII)
  • lower(string)- gibt die kleingeschriebene Variante der bereitgestellten Zeichenfolge zurück (nur US ASCII)
  • trim(string) - entfernt führende und nachfolgende Leerzeichen
  • string_join(list, separator) - verknüpft Listenelemente mit Trennzeichen

Example:

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

Graph-Funktionen

  • nodes(path) - Gibt Knoten aus einem Pfadwert zurück.
  • edges(path) - gibt Ränder aus einem Pfadwert zurück.
  • labels(node_or_edge) - gibt die Beschriftungen eines Knotens oder Rands als Liste von Zeichenfolgen zurück.

Example:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues

Listenfunktionen

  • size(list) - gibt die Größe eines Listenwerts zurück.
  • trim(list,n) - Kürzen einer Liste, die höchstens die Größe hat n

Example:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

Zeitliche Funktionen

  • zoned_datetime() - gibt aktuelle zoned datetime zurück.
  • zoned_datetime("2025-09-12T10:10:52Z") - gibt zonenbezogene Datumstime zurück, die vom Argument im ISO 8601-Format angegeben wird.

Example:

RETURN zoned_datetime() AS now

Allgemeine Funktionen

  • coalesce(value1, value2, ...) - gibt den ersten Wert ungleich Null zurück.

Example:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name