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 Supplementale Nutzungsbedingungen für Microsoft Azure Previews.
Dieser Artikel enthält eine umfassende Referenz für GQL-Werte und -Werttypen in Fabric Graph.
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.
- Sie können alle Zahlen miteinander vergleichen, z. B. ganze Zahlen mit Gleitkommazahlen.
- Sie können nur Referenzwerte vergleichen, die auf dieselbe Art von Objekt verweisen, z. B. Knotenverweise mit Knotenbezügen und Edgebezügen mit Edgeverweisen.
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.
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 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 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 alle Zahlen 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 |
| 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 Laufzeitfehler oder Umbruchverhalten verursachen.
- 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:
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 ]
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 in Graph 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, '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 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
Derzeit wird die Literalsyntax für Pfade nicht unterstützt.
Verwenden Sie stattdessen zum Binden von MATCH pathVar=...path pattern... Pfaden.
Funktionsweise des Vergleichs:
Sie vergleichen Pfade, indem Sie Listen mit Bezugswerten mit allen zugehörigen Knoten und Rändern vergleichen, in der Reihenfolge, in der sie entlang des Pfads auftreten.
Weitere Informationen 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:
- To STRING: You can cast most value types to STRING by using their literal representation.
- In numerische Typen: Sie können Zeichenfolgen umwandeln, die gültige numerische Literale in entsprechende numerische Typen enthalten.
- 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.