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.
Dieser Artikel enthält eine umfassende Referenz für GQL-Werte und -Werttypen in Graph in Microsoft Fabric.
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 sind standardmäßig nullfähig, es sei denn, Sie deklarieren sie explizit als NOT NULL.
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, z. B. Listen und Pfaden.
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.
- Wenn beide Werte Zahlen sind, vergleicht GQL sie anhand ihrer numerischen Werte.
- Sie können nur Referenzwerte vergleichen, die auf dieselbe Art von Objekt verweisen, z. B. Knotenverweise mit Knotenbezügen und Edgebezügen mit Edgeverweisen.
Von Bedeutung
Graph unterstützt noch keinen universellen numerischen Vergleich. Ganze Zahlen können mit ungefähren Zahlen verglichen werden, aber ungefähre numerische Werte können nicht verglichen werden. Vergleiche zwischen vorzeichen- und unsignierten ganzen Zahlen können scheitern, wenn ein unsignierter Wert außerhalb des vorzeichenmäßigen ganzzahligen Bereichs liegt.
Nullbehandlung in Vergleichen
Wenn Sie einen beliebigen Wert mit NULL vergleichen, ist das Ergebnis immer UNKNOWN. Die Nullbehandlung folgt dreiwertigen Logikprinzipien.
ORDER BY behandelt die Nullplatzierung getrennt von Vergleichen. Standardmäßig sortieren Nullwerte zuletzt sowohl in aufsteigender als auch in absteigender Reihenfolge. Verwenden NULLS FIRST oder NULLS LAST ihre Platzierung explizit kontrollieren.
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.
Die folgenden Anweisungen verwenden Distinctness-Tests:
-
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 unterscheiden sich, wenn mindestens eine Spalte vorhanden ist, in der sich die Werte aus beiden Zeilen unterscheiden.
Boolesche Werttypen
Boolesche Werte verwenden dreiwertige Logik: 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:
TRUEFALSE-
UNKNOWNoderNULL
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. Diese 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 unterstützt vorzeichen- und unsignierte ganze Zahlen.
Funktionsweise des Vergleichs:
Das System vergleicht kompatible exakte numerische Werte anhand ihres numerischen Werts.
Schreiben ganzzahliger Literale:
| Description | Example | Wert |
|---|---|---|
| Integer | 123456 | 123456 |
| Ganze Zahl mit 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 unterstützt ungefähre Zahlen, die IEEE (Institute of Electrical and Electronics Engineers) 754-kompatible Gleitkommazahlen sind.
Funktionsweise des Vergleichs:
Das System vergleicht kompatible approximative numerische Werte anhand ihres numerischen Werts.
So schreiben Sie Gleitkommaliterale:
| Description | Example | Wert |
|---|---|---|
| Allgemeine Schreibweise | 123.456 | 123.456 |
| Allgemeine Schreibweise mit Gruppierung | 123_456.789 | 123456.789 |
| Wissenschaftliche Schreibweise | 1.23456e2 | 123.456 |
| Wissenschaftliche Schreibweise (Großbuchstaben) | 1.23456E2 | 123.456 |
| Doppelte Genauigkeit mit Suffix | 123.456d | 123.456 |
| Wissenschaftliche Notation mit Suffix | 2.5e10d | 25000000000 |
| Signierte ganzzahlige Notation mit Suffix | -17d | -17.0 |
Von Bedeutung
Graph unterstützt die d und D Suffixe für FLOAT64 Literale. Die Suffixe und F wörtliche f Suffixe werden derzeit nicht unterstützt.
Zusätzliche numerische Überlegungen:
-
Überlauf und Unterlauf: Ganzzahlige Operationen, die den unterstützten Bereich überschreiten, erzeugen einen Fehler mit kanonischem GQL-Status
22003. - Genauigkeit: Gleitkommavorgänge verlieren aufgrund von IEEE 754-Darstellungseinschränkungen möglicherweise die Genauigkeit.
- Spezielle Gleitkommawerte: Siehe Gleitkommatypen für die Abfrage-API-Darstellung der IEEE 754-Spezialwerte.
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:
Verwenden Sie das ISO 8601-Format mit Zeitzoneninformationen.
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 ]
Dauerwerte
Ein Dauerwert stellt ein ISO-8601-Tagesintervall dar. Erstellen Sie eine, indem Sie eine ISO-8601-Dauerzeichenkette an DURATION:
DURATION('P1DT2H30M')
Dauerwerte unterstützen Vergleich, Addition, Subtraktion und Skalierung. Sie können auch eine Dauer von einem zonierten Datum hinzufügen oder abziehen oder zwei zonierte Datumszeiten abziehen, um eine Dauer abzuleiten.
Von Bedeutung
Die Grafik unterstützt Tageszeiten, aber nicht Jahr-Monat-Dauern. Die Funktion DURATION_BETWEEN(start, end) wird derzeit nicht unterstützt; verwenden Sie stattdessen den Subtraktionsoperator zwischen zonierten Datumszeitwerten.
Typsyntax:
DURATION [ 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. Sie können diese Werte verwenden, um auf Knoteneigenschaften zuzugreifen und Vergleiche durchzuführen.
Funktionsweise des Vergleichs:
Vergleichen Von Knotenverweiswerten nur für Gleichheit. Zwei Knotenverweiswerte sind gleich, wenn sie nur dann auf denselben Knoten verweisen.
Graph definiert eine deterministische Reihenfolge über Referenzwerte. Diese Reihenfolge kann sich jedoch von Abfrage zu Abfrage ändern, und Sie sollten sich nicht darauf in Produktionsabfragen verlassen.
So greifen Sie auf Eigenschaften zu:
Verwenden Sie die Punktnotation, um auf Knoteneigenschaften zuzugreifen:
node_var.property_name
Abstrakte Knotentypen in Diagrammschemas:
Definieren Sie beim Arbeiten mit Diagrammtypen abstrakte Knotentypen, 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, bei denen Sie mit dem Basistyp übereinstimmen, 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
Bei den vorstehenden Abfragen wird davon ausgegangen, dass der Diagrammtyp zuvor skizziert wurde und den Beispieldatensatz für soziale Netzwerke nicht verwenden.
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. Sie können diese Werte verwenden, um auf Edgeeigenschaften zuzugreifen und Vergleiche durchzuführen.
Funktionsweise des Vergleichs:
Sie können edgeverweiswerte nur für Gleichheit vergleichen. Zwei Edgeverweiswerte sind nur gleich, wenn sie 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 im Diagramm 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 verfolgt ihren Status als Gruppenlisten.
Sie können Gruppenlisten in horizontaler Aggregation verwenden. 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.20m, 3.45m, 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)
-- Test elements against a predicate
ANY(element IN list_var WHERE element IS NOT NULL)
Verwenden Sie die ALL, ANY, NONE, und SINGLE Listenprädikatenfunktionen , um zu testen, wie viele Listenelemente eine Bedingung erfüllen.
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 und vieles mehr.
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
Sie können Pfadwerte mit der PATH [node, edge, node] Syntax erstellen oder Pfade binden mit MATCH pathVar=...path pattern....
Funktionsweise des Vergleichs:
Du kannst Pfadwerte für Gleichheit vergleichen und sie als Sortierschlüssel verwenden. Zwei Pfadwerte sind gleich, wenn sie dieselbe Folge von Knoten- und Kantenreferenzen enthalten. Verlasse dich nicht auf die relative Sortierreihenfolge verschiedener Pfade über Anfragen hinweg.
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 numerische Werttypen können implizit umgewandelt werden, wenn ein Ausdruck einen gemeinsamen Typ benötigt:
- Ganzzahl und Gleitkomma: Die ganze Zahl wird in einen ungefähren numerischen Typ umgewandelt.
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
CAST(-42.9m AS INT64) -- -42
CAST(1.20m AS STRING) -- "1.20"
Umwandlungsregeln:
- Zu STRING: Du kannst die meisten Wertetypen mit ihrer wörtlichen Darstellung in STRING umsetzen.
- In BOOL: Sie können Zeichenfolgen "true" oder "false" (Groß-/Kleinschreibung) in boolesche Werte umwandeln.
- Ungültige Umwandlungen: Wenn Sie versuchen, inkompatible Werte zu umwandeln, treten Laufzeitfehler auf.