Freigeben über


GQL-Werte und Werttypen

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.

Die GQL-Sprache unterstützt verschiedene Arten von Werten wie Zahlen, Zeichenfolgen und Diagrammelemente. Diese Werte sind in Gruppen unterteilt, die als Wertetypen bezeichnet werden, wodurch definiert wird, welche Vorgänge Sie ausführen können und wie sich Werte in verschiedenen Kontexten verhalten. Das Verständnis des Typsystems ist für das Schreiben korrekter Abfragen und das Vermeiden von Laufzeitfehlern unerlässlich.

Von Bedeutung

In diesem Artikel wird ausschließlich das Beispieldiagramm-Dataset für soziale Netzwerke verwendet.

Schlüsselkonzepte:

  • Werttypen können nullable oder material (nicht nullable) sein, je nachdem, ob sie den Nullwert einschließen oder ausschließen.
  • Nicht nullable Werttypen werden syntaktisch als NOT NULL.
  • Derselbe Wert kann zu mehreren Werttypen (Polymorphismus) gehören.
  • Der Nullwert ist ein Element jedes Nullwertetyps.

Hinweis

Alle Werttypen können standardmäßig null sein, es sei denn, sie werden explizit als NOT NULLdeklariert. Gibt z. B INT . den Nullwert-Ganzzahltyp an, während INT NOT NULL der Material-Ganzzahltyp angegeben wird.

Organisieren von Werttypen

Alle Werttypen werden in zwei Hauptkategorien unterteilt, die unterschiedlichen Zwecken in Ihren Abfragen dienen:

  • Vordefinierte Werttypen – In die Sprache integriert (z. B. Zahlen, Zeichenfolgen und Booleane).
  • Konstruierte Werttypen – Zusammengesetzt aus anderen Typen (Listen, Pfade).

Vordefinierte Werttypen werden weiter in spezialisierte Kategorien unterteilt:

  • Boolesche Werttypen – True, false und unbekannte Werte für logische Vorgänge.
  • Zeichenzeichenfolgenwerttypen – Textdaten mit Unicode-Unterstützung.
  • Numerische Werttypen – Ganzzahlen und Gleitkommazahlen.
  • Zeitliche Werttypen – Datums - und Uhrzeitwerte mit Unterstützung für Zeitzonen.
  • Referenzwerttypen – Verweise auf Knoten und Kanten in Ihrem Diagramm.
  • Unwesentliche Werttypen – Spezielle Werte wie Null und nichts.

Funktionsweise von Gleichheit und Vergleich

Das Verständnis, wie GQL Werte vergleicht, ist entscheidend für das Schreiben effektiver Abfragen, insbesondere beim Filtern, Sortieren und Verknüpfungen.

Grundlegende Vergleichsregeln

  • In der Regel können Sie Werte derselben Art vergleichen.
  • Alle Zahlen können miteinander verglichen werden (z. B. ganze Zahlen mit Floats).
  • Es können nur Referenzwerte verglichen werden, die auf dieselbe Art von Objekt verweisen (Knotenverweise mit Knotenbezügen, Edgeverweise mit Randbezügen).

Nullbehandlung in Vergleichen

Wenn Sie einen beliebigen Wert mit NULL vergleichen, ist das Ergebnis immer UNKNOWN. Die Nullbehandlung folgt dreiwertigen Logikprinzipien. Die Anweisung behandelt jedoch bei der ORDER BY Sortierung den kleinsten Wert und stellt ein vorhersagbares NULL Sortierverhalten bereit.

Unterscheidbarkeit im Vergleich zur Gleichheit

Bestimmte Aussagen testen nicht auf Gleichheit, sondern auf Unterscheidbarkeit. Das Verständnis des Unterschieds ist für Vorgänge wie DISTINCT und GROUP BY.

Distinctness-Tests folgen den gleichen Regeln wie Gleichheit mit einer entscheidenden Ausnahme: NULL unterscheidet sich nicht von NULL. Die Unterscheidbarkeit unterscheidet sich von Gleichheitstests NULL, die immer zur UNKNOWNFolge haben.

Distinctness-Tests werden von:

  • RETURN DISTINCT: Bestimmt, ob zwei Zeilen dupliziert sind.
  • GROUP BY: Bestimmt, ob zwei Zeilen während der Aggregation zum gleichen Gruppierungsschlüssel gehören.

Zwei Zeilen aus einer Tabelle werden als unterschiedlich angesehen, wenn mindestens eine Spalte vorhanden ist, in der sich die Werte aus beiden Zeilen unterscheiden.

Boolesche Werttypen

Boolesche Werte sind die dreiwertigen Logikwerte TRUE, FALSEund UNKNOWN.

Hinweis

UNKNOWN und der Nullwert ist identisch. UNKNOWN ist nur ein Nullwert vom Typ BOOL.

Funktionsweise der Gleichheit:

Linker Wert Rechter Wert Ergebnis
WAHR FALSE FALSE
WAHR WAHR WAHR
WAHR UNBEKANNT UNBEKANNT
FALSE FALSE WAHR
FALSE WAHR FALSE
FALSE UNBEKANNT UNBEKANNT
UNBEKANNT FALSE UNBEKANNT
UNBEKANNT WAHR UNBEKANNT
UNBEKANNT UNBEKANNT UNBEKANNT

Funktionsweise des Vergleichs:

FALSE ist kleiner als TRUE. Jeder Vergleich mit UNKNOWN Ergebnissen in UNKNOWN.

So schreiben Sie boolesche Literale:

  • TRUE
  • FALSE
  • UNKNOWN oder NULL

Typsyntax:

BOOL [ NOT NULL ]

Zeichenfolgenwerttypen

Zeichenfolgen sind Sequenzen von Unicode-Codepunkten (sie können null längen). Die leere Zeichenfolge ist nicht mit dem Nullwert identisch.

Funktionsweise des Vergleichs:

Zeichenzeichenfolgen werden verglichen, indem die Unicode-Skalarwerte ihrer Codepunkte verglichen werden (die Vergleichsmethode wird manchmal als Sortierung bezeichnet UCS_BASIC ).

Schreiben von Zeichenfolgenliteralen:

Schließen Sie Die Zeichen in doppelte Anführungszeichen () oder einfache Anführungszeichen ein" ('):

"Hello, World!"
'Guten Tag!'

Bestimmte Unicode-Steuerelementzeichen können in Zeichenfolgenliteralen nicht direkt angegeben werden. Insbesondere sind alle Zeichen aus den Unicode-Klassen "Cc" und "Cn" unzulässig. Verwenden Sie stattdessen C-Format-Escapes \:

Input Unentkommener Charakter
\\ \
\" "
\' '
\` `
\t U+0009
\b U+0008
\n U+000A
\r U+000D
\f U+000C
\uabcd U+ABCD
\UABCDEF01 U+ABCDEF01

GQL unterstützt auch das Escapen im SQL-Stil durch Verdoppelung der Umgebenden " und ' Zeichen:

Ist-Zeichenfolge C-Formatvorlage SQL-Stil
Wie "Ironisch!" "How \"ironic!\"" "How ""ironic!"""
Wie 'Ironisch!' 'How \'ironic!\'' 'How ''ironic!'''

Tipp

Deaktivieren Sie C-Format-Escapes\, indem Sie dem Zeichenfolgenliteral das Präfix voranstellen.@

Typsyntax:

STRING [ NOT NULL ]

Numerische Typen

Genaue numerische Typen

Graph in Microsoft Fabric unterstützt genaue Zahlen, die negative oder positive ganze Zahlen sind.

Funktionsweise des Vergleichs:

Das System vergleicht alle Zahlen anhand ihres numerischen Werts.

Schreiben ganzzahliger Literale:

Description Example Wert
Integer 123456 123456
Ganze Zahl w. Gruppierung 123_456 123456
Explizit positive ganze Zahl +123456 123456
Null 0 0
Negative ganze Zahl -123456 -123456

Typsyntax:

INT [ NOT NULL ]
INT64 [ NOT NULL ]
UINT [ NOT NULL ]
UINT64 [ NOT NULL ]

INT und INT64 geben Sie denselben numerischen Typ an. Dies tun UINT und UINT64.

Ungefähre numerische Typen

Graph in Microsoft Fabric unterstützt ungefähre Zahlen, die IEEE (Institute of Electrical and Electronics Engineers) 754-kompatible Gleitkommazahlen sind.

Funktionsweise des Vergleichs:

Das System vergleicht alle Zahlen anhand ihres numerischen Werts.

So schreiben Sie Gleitkommaliterale:

Description Example Wert
Allgemeine Schreibweise 123.456 123.456
Allgemeine Schreibweise w. Gruppierung 123_456.789 123456.789
Wissenschaftliche Schreibweise 1.23456e2 123.456
Wissenschaftliche Schreibweise (Großbuchstaben) 1.23456E2 123.456
Gleitkomma mit Suffix 123.456f 123.456
Doppelte Genauigkeit mit Suffix 123.456d 123.456

Zusätzliche numerische Überlegungen:

  • Überlauf und Unterlauf: Ganzzahlige Vorgänge, die den unterstützten Bereich überschreiten, können abhängig von der Implementierung zu Laufzeitfehlern oder Umbruchverhalten führen.
  • Genauigkeit: Gleitkommavorgänge verlieren aufgrund von IEEE 754-Darstellungseinschränkungen möglicherweise die Genauigkeit.
  • Spezielle Gleitkommawerte: NaN (Keine Zahl), positive Unendlichkeit (+∞) und negative Unendlichkeit (-∞) können in Gleitkommakontexten unterstützt werden.

Typsyntax:

FLOAT [ NOT NULL ]
DOUBLE [ NOT NULL ]
FLOAT64 [ NOT NULL ]

DOUBLE, FLOATund FLOAT64 alle geben denselben Typ an.

Zeitliche Werttypen

Zonierte Datumszeitwerte

Ein zonenbezogener Datetime-Wert stellt eine ISO 8601-kompatible Datumstime mit einem Zeitzonenoffset dar.

Funktionsweise des Vergleichs:

Das System vergleicht zonenierte Datetime-Werte chronologisch nach ihren absoluten Zeitpunkten.

Schreiben von Datetime-Literalen:

Iso 8601-Format mit Zeitzoneninformationen verwenden:

ZONED_DATETIME('2024-08-15T14:30:00+02:00')
ZONED_DATETIME('2024-08-15T12:30:00Z')
ZONED_DATETIME('2024-12-31T23:59:59.999-08:00')

Typsyntax:

ZONED DATETIME [ NOT NULL ]

Referenzwerttypen

Referenzwerte enthalten Verweise auf übereinstimmende Knoten oder Kanten.

Knotenverweiswerte

Knotenverweiswerte stellen Verweise auf bestimmte Knoten in Ihrem Diagramm dar. In der Regel erhalten Sie diese Werte, wenn Knoten in Diagrammmustern übereinstimmen, und Sie können diese verwenden, um auf Knoteneigenschaften zuzugreifen und Vergleiche durchzuführen.

Funktionsweise des Vergleichs:

Sie sollten nur Knotenverweiswerte für Gleichheit vergleichen. Zwei Knotenverweiswerte sind gleich, wenn sie nur dann auf denselben Knoten verweisen.

Graph in Microsoft Fabric definiert eine deterministische Reihenfolge über Referenzwerte. Diese Reihenfolge kann sich jedoch von Abfrage zu Abfrage ändern und sollte nicht in Produktionsabfragen verwendet werden.

So greifen Sie auf Eigenschaften zu:

Verwenden Sie die Punktnotation, um auf Knoteneigenschaften zuzugreifen:

node_var.property_name

Abstrakte Knotentypen in Diagrammschemas:

Beim Arbeiten mit Diagrammtypen können Sie abstrakte Knotentypen definieren, die als Basistypen für die Vererbung dienen, aber nicht direkt instanziiert werden können. Abstrakte Typen ermöglichen polymorphe Abfragemuster:

-- Abstract base type (cannot be instantiated)
ABSTRACT
(:Person => {
  id :: INT64,
  name :: STRING,
  birth_date :: ZONED DATETIME
}),

-- Concrete types that inherit from abstract base
(:Employee => Person {
  employee_id :: STRING,
  department :: STRING,
  hire_date :: ZONED DATETIME
})

(:Customer => :Person {
  customer_id :: STRING,
  membership_level :: STRING,
  registration_date :: ZONED DATETIME
})

Polymorphe Abfragen mit abstrakten Typen:

Abstrakte Typen ermöglichen leistungsstarke Abfragemuster, in denen Sie mit dem Basistyp übereinstimmen können, um alle Instanzen abgeleiteter Typen zu finden:

-- Find all Person instances (both Employee and Customer)
MATCH (p:Person)
RETURN p.name, p.birthday, labels(p) AS label_names

-- Mixed type patterns
MATCH (e:Employee)-[:knows]-(c:Customer)
WHERE e.department = 'Sales' AND c.membership_level = 'Premium'
RETURN e.name AS sales_person, c.name AS customer

Hinweis

Die vorangegangenen Abfragen gehen vom oben skizzierten Graphtyp aus und verwenden nicht den Beispieldatensatz für soziale Netzwerke.

Dieser Ansatz bietet Die Typsicherheit und ermöglicht gleichzeitig flexible, vererbungsbasierte Datenmodellierung in Ihren Diagrammschemas.

Typsyntax:

NODE [ NOT NULL ]

Graph-Edgeverweiswerte

Kantenreferenzwerte des Graphs repräsentieren Verweise auf bestimmte Kanten in deinem Graphen. Sie erhalten diese Werte in der Regel, wenn Ränder in Diagrammmustern übereinstimmen, und Sie können diese verwenden, um auf Edgeeigenschaften zuzugreifen und Vergleiche durchzuführen.

Funktionsweise des Vergleichs:

Sie können edgeverweiswerte nur für Gleichheit vergleichen. Zwei Edgeverweiswerte sind gleich, wenn sie nur dann auf denselben Rand verweisen.

So greifen Sie auf Eigenschaften zu:

Verwenden Sie die Punktnotation, um auf Edgeeigenschaften zuzugreifen:

edge_var.property_name

Typsyntax:

EDGE [ NOT NULL ]

Unwesentliche Werttypen

Unwesentliche Werttypen enthalten keine "gewöhnlichen" Materialwerte.

NULL-Werte

Der Nullwert stellt das Fehlen eines bekannten Materialwerts dar. Es handelt sich um ein Element jedes Nullwertetyps und unterscheidet sich von jedem Materialwert. Dies ist der einzige Wert des Nulltyps.

Funktionsweise des Vergleichs:

Wenn Sie einen beliebigen Wert mit NULL vergleichen, lautet UNKNOWNdas Ergebnis .

So wird's gemacht: Schreiben von Nullliteralen:

NULL        -- type NULL
UNKNOWN     -- type BOOL

Typsyntax:

NULL

Nichts

Der Typ "Nothing" ist ein Werttyp, der keine Werte enthält.

Obwohl es wie eine Technik aussieht, können Sie mit dem Nichtstyp Werten wie leeren Listenwerten einen genauen Typ zuweisen. Mit dem Nichtstyp können Sie leere Listen übergeben, wo ein Listenwerttyp erwartet wird (unabhängig vom erforderlichen Listenelementtyp).

Typsyntax:

NOTHING
NULL NOT NULL

(NOTHING und NULL NOT NULL geben Sie denselben Typ an)

Konstruierte Werttypen

Werte auflisten

Listenwerte sind Sequenzen von Elementen. Listen können Elemente desselben Typs enthalten und Nullwerte enthalten.

Von Bedeutung

Derzeit können Listen in Microsoft Fabric keine Elemente gemischter Typen enthalten.

Funktionsweise des Vergleichs:

Listen werden zuerst nach Größe verglichen, dann nach Element in der Reihenfolge. Zwei Listen sind gleich, wenn sie dieselbe Größe haben und alle entsprechenden Elemente gleich sind.

Tipp

Vergleiche mit NULL-Elementwerten führen immer zu UNKNOWN. Null-Vergleiche können zu überraschenden Ergebnissen führen, wenn Listenwerte verglichen werden!

Gruppenlisten:

Gruppenlisten sind Listen, die an übereinstimmende Randmuster mit variabler Länge gebunden sind. Graph in Microsoft Fabric verfolgt ihren Status als Gruppenlisten.

Gruppenlisten können in horizontaler Aggregation verwendet werden. Weitere Informationen finden Sie unter GQL-Ausdrücke und -Funktionen.

Schreiben von Listenliteralen:

Verwenden Sie zum Erstellen von Listen die eckige Klammernotation:

[1, 2, 3, 4]
['hello', 'world']
[1, 'mixed', TRUE, NULL]
[]  -- empty list

So greifen Sie auf Elemente zu:

Verwenden Sie eckige Klammern mit nullbasierter Indizierung, um auf Listenelemente zuzugreifen:

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

Allgemeine Listenvorgänge:

-- Check if list contains a value
WHERE 'Engineering' IN employee.departments

-- List concatenation
RETURN [1, 2] || [3, 4]  -- [1, 2, 3, 4]

-- List size
size(list_var)

Typsyntax:

LIST<element_type> [ NOT NULL ]
LIST<element_type NOT NULL> [ NOT NULL ]

Wo element_type kann jeder unterstützte Typ sein, z. B. STRING, INT64, DOUBLE, BOOL usw.

Pfadwerte

Pfadwerte stellen Pfade dar, die in Ihrem Diagramm übereinstimmen. Ein Pfadwert enthält eine nicht erwendige Sequenz alternierender Knoten- und Edgeverweiswerte, die immer mit einem Knotenverweiswert beginnen und enden. Diese Referenzwerte identifizieren die Knoten und Kanten des ursprünglich übereinstimmenen Pfads in Ihrem Diagramm.

Struktur von Pfaden:

Ein Pfad besteht aus:

  • Eine Abfolge von Knoten und Kanten: node₁ - edge₁ - node₂ - edge₂ - ... - nodeₙ
  • Beginnt und endet immer mit einem Knoten.
  • Enthält mindestens einen Knoten (minimale Pfadlänge ist null Kanten).

Hinweis

Die Literalsyntax für Pfade wird derzeit noch nicht unterstützt. Stattdessen können Pfade mithilfe von MATCH pathVar=...path pattern....

Funktionsweise des Vergleichs:

Wege werden verglichen, indem Listen von Referenzwerten mit allen ihren Bestandteilen und Kanten verglichen werden, in der Reihenfolge, in der sie entlang des Pfades auftreten.

Weitere Details finden Sie in den Vergleichsregeln für Listenwerte und Referenzwerte .

Typsyntax:

PATH [ NOT NULL ]

Typkonvertierungen und Umwandlungen

GQL unterstützt sowohl implizite als auch explizite Typkonvertierungen, um flexible Vorgänge zu ermöglichen und gleichzeitig die Typsicherheit zu gewährleisten.

Implizite Konvertierungen

Bestimmte Werttypen können implizit konvertiert werden, wenn die Konvertierung sicher ist und keine Informationen verloren gehen:

  • Numerische Verbreiterung: Ganzzahlwerte können implizit in Gleitkommatypen konvertiert werden, wenn sie in gemischten arithmetischen Vorgängen verwendet werden.
  • Zeichenfolgenkontexte: Werte können implizit in Zeichenfolgen in bestimmten Kontexten wie Verkettungsvorgängen konvertiert werden.

Explizite Umwandlung

Verwenden Sie die CAST Funktion, um Werte explizit zwischen kompatiblen Typen zu konvertieren:

CAST(value AS target_type)

Beispiele:

CAST(123 AS STRING)           -- "123"
CAST('456' AS INT64)          -- 456
CAST(3.14 AS STRING)          -- "3.14"
CAST('true' AS BOOL)          -- TRUE

Umwandlungsregeln:

  • Zu STRING: Die meisten Werttypen können mit ihrer literalen Darstellung auf STRING gecastet werden.
  • Zu numerischen Typen: Zeichenketten, die gültige numerische Literale enthalten, können in geeignete numerische Typen geformt werden.
  • In BOOL: Zeichenfolgen 'true'/'false' (Groß-/Kleinschreibung) können in boolesche Werte umwandeln.
  • Ungültige Umwandlungen: Der Versuch, inkompatible Werte zu umwandeln, führt zu Laufzeitfehlern.