Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.
De GQL-taal ondersteunt verschillende soorten waarden, zoals getallen, tekenreeksen en grafiekelementen. Deze waarden worden ingedeeld in sets die waardetypen worden genoemd, waarmee wordt gedefinieerd welke bewerkingen u kunt uitvoeren en hoe waarden zich gedragen in verschillende contexten. Inzicht in het typesysteem is essentieel voor het schrijven van juiste query's en het voorkomen van runtimefouten.
Belangrijk
Dit artikel gebruikt uitsluitend de voorbeeldgrafiekdataset van sociale netwerken.
Sleutelbegrippen:
- Waardetypen kunnen nullable of materiaal zijn (niet-nullable), afhankelijk van of ze de null-waarde bevatten of uitsluiten.
-
Niet-nullable waardetypen worden syntactisch opgegeven als
NOT NULL. - Dezelfde waarde kan behoren tot meerdere waardetypen (polymorfisme).
- De null-waarde is lid van elk type null-waarde.
Opmerking
Alle waardetypen zijn standaard null-baar, tenzij deze expliciet zijn gedeclareerd als NOT NULL.
Hiermee geeft u bijvoorbeeld INT het type nullable integer op, terwijl INT NOT NULL het type materiaal integer wordt opgegeven.
Hoe waardetypen worden ingedeeld
Alle waardetypen worden onderverdeeld in twee hoofdcategorieën die verschillende doeleinden in uw query's dienen:
- Vooraf gedefinieerde waardetypen : ingebouwd in de taal (zoals getallen, tekenreeksen en booleaanse waarden).
- Samengestelde waardetypen : samengesteld uit andere typen (lijsten, paden).
Vooraf gedefinieerde waardetypen worden verder ingedeeld in gespecialiseerde categorieën:
- Booleaanse waardetypen : waar, onwaar en onbekende waarden voor logische bewerkingen.
- Tekenreekswaardetypen : tekstgegevens met Unicode-ondersteuning.
- Numerieke waardetypen : gehele getallen en getallen met drijvende komma.
- Tijdelijke waardetypen : datum- en tijdwaarden met ondersteuning voor tijdzones.
- Referentiewaardetypen : verwijzingen naar knooppunten en randen in uw grafiek.
- Immateriële waardetypen : speciale waarden zoals null en niets.
Hoe gelijkheid en vergelijking werken
Het is van cruciaal belang om te begrijpen hoe GQL waarden vergelijkt voor het schrijven van effectieve query's, met name bij het filteren, sorteren en samenvoegen.
Basisvergelijkingsregels
- Over het algemeen kunt u waarden van hetzelfde type vergelijken.
- Alle getallen kunnen worden vergeleken met elkaar (bijvoorbeeld gehele getallen met floats).
- Alleen referentiewaarden die verwijzen naar hetzelfde type object kunnen worden vergeleken (knooppuntverwijzingen met knooppuntverwijzingen, edge-verwijzingen met edge-verwijzingen).
Null-verwerking in vergelijkingen
Wanneer u een waarde vergelijkt met null, is het resultaat altijd UNKNOWN. Null-verwerking volgt de logicaprincipes met drie waarden. De ORDER BY instructie wordt NULL echter behandeld als de kleinste waarde bij het sorteren, wat voorspelbaar bestelgedrag biedt.
Distinctness versus gelijkheid
Bepaalde beweringen testen niet op gelijkheid, maar op onderscheid. Inzicht in het verschil is belangrijk voor bewerkingen zoals DISTINCT en GROUP BY.
Distinctness testing volgt dezelfde regels als gelijkheid met één cruciale uitzondering: NULL is niet anders dan NULL. Verschillen verschillen van gelijkheidstests met betrekking tot NULL, wat altijd resulteert in UNKNOWN.
Distinctness testing wordt gebruikt door:
-
RETURN DISTINCT: bepaalt of twee rijen duplicaten van elkaar zijn. -
GROUP BY: bepaalt of twee rijen tot dezelfde groeperingssleutel behoren tijdens de aggregatie.
Twee rijen uit een tabel worden als uniek beschouwd als er ten minste één kolom is waarin de waarden uit beide rijen verschillend zijn.
Booleaanse waardetypen
Booleaanse waarden zijn de logische waarden met drie waarden TRUE, FALSEen UNKNOWN.
Opmerking
UNKNOWN en de null-waarde zijn identiek.
UNKNOWN is slechts een null-waarde van het type BOOL.
Hoe gelijkheid werkt:
| Linkerwaarde | Juiste waarde | Resultaat |
|---|---|---|
| TRUE | FALSE | FALSE |
| TRUE | TRUE | TRUE |
| TRUE | ONBEKEND | ONBEKEND |
| FALSE | FALSE | TRUE |
| FALSE | TRUE | FALSE |
| FALSE | ONBEKEND | ONBEKEND |
| ONBEKEND | FALSE | ONBEKEND |
| ONBEKEND | TRUE | ONBEKEND |
| ONBEKEND | ONBEKEND | ONBEKEND |
Hoe vergelijking werkt:
FALSE is kleiner dan TRUE. Elke vergelijking met UNKNOWN resultaten in UNKNOWN.
Booleaanse letterlijke waarden schrijven:
TRUEFALSE-
UNKNOWNofNULL
Typesyntaxis:
BOOL [ NOT NULL ]
Tekenreekswaardetypen
Tekenreeksen zijn reeksen Unicode-codepunten (ze kunnen lengte nul zijn). De lege tekenreeks is niet identiek aan de null-waarde.
Hoe vergelijking werkt:
Tekenreeksen worden vergeleken door de Unicode-scalaire waarden van hun codepunten te vergelijken (de vergelijkingsmethode wordt ook wel de UCS_BASIC sortering genoemd).
Letterlijke tekenreeksen schrijven:
Plaats uw tekens tussen dubbele aanhalingstekens (") of enkele aanhalingstekens ('):
"Hello, World!"
'Guten Tag!'
U kunt bepaalde Unicode-besturingstekens niet rechtstreeks opgeven in letterlijke tekenreeksen.
In het bijzonder zijn alle tekens uit de unicode-klassen Algemeen categorie 'CC' en 'Cn' niet toegestaan. Gebruik in plaats daarvan C-style \-escapes:
| Invoer | Niet-gescaped teken |
|---|---|
\\ |
\ |
\" |
" |
\' |
' |
\` |
` |
\t |
U+0009 |
\b |
U+0008 |
\n |
U+000A |
\r |
U+000D |
\f |
U+000C |
\uabcd |
U+ABCD |
\UABCDEF01 |
U+ABCDEF01 |
GQL biedt ook ondersteuning voor ESCAPE-stijl in SQL-stijl door de omringende " tekens en ' tekens te verdubbelen:
| Werkelijke tekenreeks | C-stijl | SQL-stijl |
|---|---|---|
| Hoe "Ironisch!" | "How \"ironic!\"" |
"How ""ironic!""" |
| Hoe ironisch! | 'How \'ironic!\'' |
'How ''ironic!''' |
Aanbeveling
Schakel C-stijl \-escapes uit door de letterlijke tekenreeks vooraf te laten gaan.@
Typesyntaxis:
STRING [ NOT NULL ]
Numerieke typen
Exacte numerieke typen
Graph in Microsoft Fabric ondersteunt exacte getallen die negatieve of positieve gehele getallen zijn.
Hoe vergelijking werkt:
Het systeem vergelijkt alle getallen op basis van hun numerieke waarde.
Letterlijke waarden voor gehele getallen schrijven:
| Description | Example | Waarde |
|---|---|---|
| Integer | 123456 | 123456 |
| Geheel getal met groepering | 123_456 | 123456 |
| Expliciet positief geheel getal | +123456 | 123456 |
| Nul | 0 | 0 |
| Negatief geheel getal | -123456 | -123456 |
Typesyntaxis:
INT [ NOT NULL ]
INT64 [ NOT NULL ]
UINT [ NOT NULL ]
UINT64 [ NOT NULL ]
INT en INT64 geef hetzelfde numerieke type op.
Dus wel UINT en UINT64.
Numerieke typen bij benadering
Graph in Microsoft Fabric ondersteunt geschatte getallen die IEEE (Institute of Electrical and Electronics Engineers) zijn die compatibel zijn met 754 drijvendekommanummers.
Hoe vergelijking werkt:
Het systeem vergelijkt alle getallen op basis van hun numerieke waarde.
Letterlijke waarden voor zwevende komma schrijven:
| Description | Example | Waarde |
|---|---|---|
| Algemene notatie | 123.456 | 123.456 |
| Algemene notatie w. groepering | 123_456.789 | 123456.789 |
| Wetenschappelijke notatie | 1.23456e2 | 123.456 |
| Wetenschappelijke notatie (hoofdletters) | 1.23456E2 | 123.456 |
| Drijvende komma met achtervoegsel | 123.456f | 123.456 |
| Dubbele precisie met achtervoegsel | 123.456d | 123.456 |
Aanvullende numerieke overwegingen:
- Overloop en onderloop: gehele getallen die het ondersteunde bereik overschrijden, kunnen leiden tot runtimefouten of een terugloopgedrag, afhankelijk van de implementatie.
- Precisie: Drijvendekommabewerkingen kunnen precisie verliezen vanwege IEEE 754-representatiebeperkingen.
-
Speciale floatwaarden:
NaN(Geen getal), positieve oneindigheid (+∞) en negatieve oneindigheid (-∞) kunnen worden ondersteund in drijvende-kommacontexten.
Typesyntaxis:
FLOAT [ NOT NULL ]
DOUBLE [ NOT NULL ]
FLOAT64 [ NOT NULL ]
DOUBLE, FLOATen FLOAT64 allemaal hetzelfde type opgeven.
Tijdelijke waardetypen
Zoned datetime-waarden
Een zonegebonden datum/tijd-waarde vertegenwoordigt een iso 8601-compatibele datum/tijd met een tijdzone-offset.
Hoe vergelijking werkt:
Het systeem vergelijkt gezoneerde datum/tijdwaarden chronologisch op hun absolute tijdpunten.
Letterlijke datum/tijd schrijven:
Gebruik de ISO 8601-indeling met tijdzone-informatie:
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')
Typesyntaxis:
ZONED DATETIME [ NOT NULL ]
Referentiewaardetypen
Referentiewaarden bevatten verwijzingen naar overeenkomende knooppunten of randen.
Verwijzingswaarden voor knooppunten
Knooppuntverwijzingswaarden vertegenwoordigen verwijzingen naar specifieke knooppunten in uw grafiek. Normaal gesproken krijgt u deze waarden wanneer knooppunten worden vergeleken in grafiekpatronen en kunt u deze gebruiken om toegang te krijgen tot knooppunteigenschappen en vergelijkingen uit te voeren.
Hoe vergelijking werkt:
U moet alleen referentiewaarden voor knooppunten vergelijken voor gelijkheid. Twee knooppuntreferentiewaarden zijn gelijk als en alleen als ze verwijzen naar hetzelfde knooppunt.
Graph in Microsoft Fabric definieert een deterministische volgorde ten opzichte van referentiewaarden. Deze volgorde kan echter veranderen van query in query en mag niet worden gebruikt in productiequery's.
Toegang krijgen tot eigenschappen:
Gebruik punt notatie voor toegang tot knooppunteigenschappen:
node_var.property_name
Abstracte knooppunttypen in grafiekschema's:
Wanneer u met grafiektypen werkt, kunt u abstracte knooppunttypen definiëren die fungeren als basistypen voor overname, maar die niet rechtstreeks kunnen worden geïnstantieerd. Abstracte typen maken polymorf querypatronen mogelijk:
-- 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
})
Polymorfe query's met abstracte typen:
Abstracte typen maken krachtige querypatronen mogelijk, waar u kunt vergelijken met het basistype om alle exemplaren van afgeleide typen te vinden:
-- 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
Opmerking
De voorgaande queries gaan uit van het hierboven geschetste grafiektype en gebruiken de voorbeelddataset van sociale netwerken niet.
Deze benadering biedt typeveiligheid en biedt flexibele, overnamegebaseerde gegevensmodellering in uw grafiekschema's.
Typesyntaxis:
NODE [ NOT NULL ]
Referentiewaarden voor Graph Edge
Graph Edge-referentiewaarden vertegenwoordigen verwijzingen naar specifieke randen in uw grafiek. Normaal gesproken krijgt u deze waarden wanneer randen overeenkomen met grafiekpatronen en u kunt ze gebruiken om toegang te krijgen tot edge-eigenschappen en vergelijkingen uit te voeren.
Hoe vergelijking werkt:
U kunt edge-referentiewaarden alleen vergelijken voor gelijkheid. Twee randreferentiewaarden zijn gelijk als en alleen als ze verwijzen naar dezelfde rand.
Toegang krijgen tot eigenschappen:
Gebruik punt notatie om toegang te krijgen tot edge-eigenschappen:
edge_var.property_name
Typesyntaxis:
EDGE [ NOT NULL ]
Immateriële waardetypen
Immateriële waardetypen bevatten geen 'gewone' materiaalwaarden.
Null-waarden
De null-waarde vertegenwoordigt het ontbreken van een bekende materiaalwaarde. Het is een lid van elk type null-waarde en verschilt van elke materiaalwaarde. Dit is de enige waarde van het null-type.
Hoe vergelijking werkt:
Wanneer u een waarde vergelijkt met null, is UNKNOWNhet resultaat .
Null-letterlijke waarden schrijven:
NULL -- type NULL
UNKNOWN -- type BOOL
Typesyntaxis:
NULL
Niets type
Het nietstype is een waardetype dat geen waarden bevat.
Hoewel het misschien een technisch karakter lijkt, kunt u met het type niets een nauwkeurig type toewijzen aan waarden zoals lege lijstwaarden. Met het type niets kunt u lege lijsten doorgeven waar een lijstwaardetype wordt verwacht (ongeacht het vereiste type lijstelement).
Typesyntaxis:
NOTHING
NULL NOT NULL
(NOTHING en NULL NOT NULL geef hetzelfde type op)
Samengestelde waardetypen
Lijstwaarden
Lijstwaarden zijn reeksen elementen. Lijsten kunnen elementen van hetzelfde type bevatten en null-waarden bevatten.
Belangrijk
Lijsten in de grafiek in Microsoft Fabric kunnen momenteel geen elementen van gemengde typen bevatten.
Hoe vergelijking werkt:
Lijsten worden eerst vergeleken op grootte en vervolgens op element in volgorde. Twee lijsten zijn gelijk als ze dezelfde grootte hebben en alle bijbehorende elementen gelijk zijn.
Aanbeveling
Vergelijkingen waarbij null-elementwaarden worden gebruikt, resulteren altijd in UNKNOWN. Null-vergelijkingen kunnen leiden tot verrassende resultaten bij het vergelijken van lijstwaarden.
Groepslijsten:
Groepslijsten zijn lijsten die afhankelijk zijn van overeenkomende randpatronen met een variabele lengte. Graph in Microsoft Fabric houdt hun status bij als groepslijsten.
Groepslijsten kunnen worden gebruikt in horizontale aggregatie. Zie GQL-expressies en -functies voor meer informatie.
Letterlijke waarden voor lijst schrijven:
Gebruik vierkante haakjes notatie om lijsten te maken:
[1, 2, 3, 4]
['hello', 'world']
[1, 'mixed', TRUE, NULL]
[] -- empty list
Toegang krijgen tot elementen:
Gebruik vierkante haken met indexering op basis van nul voor toegang tot lijstelementen:
list_var[0] -- first element
list_var[1] -- second element
Algemene lijstbewerkingen:
-- 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)
Typesyntaxis:
LIST<element_type> [ NOT NULL ]
LIST<element_type NOT NULL> [ NOT NULL ]
Waar element_type kan elk ondersteund type zijn, zoals TEKENREEKS, INT64, DOUBLE, BOOL, enzovoort.
Padwaarden
Padwaarden vertegenwoordigen paden die overeenkomen in uw grafiek. Een padwaarde bevat een lege reeks afwisselende knooppunt- en edge-verwijzingswaarden die altijd beginnen en eindigen met een knooppuntverwijzingswaarde. Deze referentiewaarden identificeren de knooppunten en randen van het oorspronkelijk overeenkomende pad in uw grafiek.
Hoe paden zijn gestructureerd:
Een pad bestaat uit:
- Een reeks knooppunten en randen:
node₁ - edge₁ - node₂ - edge₂ - ... - nodeₙ - Begint en eindigt altijd met een knooppunt.
- Bevat ten minste één knooppunt (minimale padlengte is nul randen).
Opmerking
De letterlijke syntaxis voor paden wordt momenteel nog niet ondersteund.
In plaats daarvan kunnen paden worden gebonden met behulp van MATCH pathVar=...path pattern....
Hoe vergelijking werkt:
Paden worden vergeleken door lijsten van referentiewaarden te vergelijken met al hun samenstellende knooppunten en randen, in de volgorde waarin ze langs het pad voorkomen.
Zie de vergelijkingsregels voor lijstwaarden en referentiewaarden voor meer details.
Typesyntaxis:
PATH [ NOT NULL ]
Typeconversies en cast-conversies
GQL ondersteunt zowel impliciete als expliciete typeconversies om flexibele bewerkingen mogelijk te maken met behoud van typeveiligheid.
Impliciete conversies
Bepaalde waardetypen kunnen impliciet worden geconverteerd wanneer de conversie veilig is en geen informatie kwijtraakt:
- Numerieke widening: Integer-waarden kunnen impliciet worden geconverteerd naar typen zwevende komma's wanneer ze worden gebruikt in gemengde rekenkundige bewerkingen.
- Tekenreekscontexten: waarden kunnen impliciet worden geconverteerd naar tekenreeksen in bepaalde contexten, zoals samenvoegingsbewerkingen.
Expliciete cast-conversie
Gebruik de CAST functie om expliciet waarden te converteren tussen compatibele typen:
CAST(value AS target_type)
Voorbeelden:
CAST(123 AS STRING) -- "123"
CAST('456' AS INT64) -- 456
CAST(3.14 AS STRING) -- "3.14"
CAST('true' AS BOOL) -- TRUE
Cast-regels:
- Naar TEKENREEKS: De meeste waardetypen kunnen worden gecast naar STRING met hun letterlijke weergave.
- Voor numerieke typen: Tekenreeksen met geldige numerieke letterlijke waarden kunnen worden omgezet in de juiste numerieke typen.
- Voor BOOL: Tekenreeksen 'true'/'false' (hoofdlettergevoelig) kunnen worden omgezet in booleaanse waarden.
- Ongeldige casts: pogingen om incompatibele waarden te casten, resulteert in runtimefouten.