GQL-waarden en -waardetypen

Dit artikel bevat een uitgebreide referentie voor GQL-waarden en waardetypen in grafiek in Microsoft Fabric.

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 u ze expliciet declareert 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, zoals lijsten en 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.
  • Als beide waarden getallen zijn, vergelijkt GQL ze aan de hand van hun numerieke waarden.
  • U kunt alleen referentiewaarden vergelijken die verwijzen naar hetzelfde type object, zoals knooppuntverwijzingen met knooppuntverwijzingen en edge-verwijzingen met edge-verwijzingen.

Belangrijk

Graph ondersteunt nog geen universele numerieke vergelijking. Gehele getallen kunnen worden vergeleken met benaderende getallen, maar benaderende numerieke waarden kunnen niet worden vergeleken. Vergelijkingen tussen ondertekende en ongesigneerde gehele getallen kunnen mislukken wanneer een ongetekende waarde buiten het getekende geheel bereik ligt.

Null-verwerking in vergelijkingen

Wanneer u een waarde vergelijkt met null, is het resultaat altijd UNKNOWN. Null-verwerking volgt de logicaprincipes met drie waarden. ORDER BY behandelt null-plaatsing apart van vergelijkingen. Standaard sorteren nullwaarden als laatste, zowel in oplopende als dalende volgorde. Gebruik NULLS FIRST of NULLS LAST controleer expliciet hun plaatsing.

Distinctness versus gelijkheid

Bepaalde instructies testen niet op gelijkheid, maar testen eerder 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.

In de volgende instructies wordt gebruikgemaakt van distinctness testing:

  • 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 zijn verschillend als er ten minste één kolom is waarin de waarden uit beide rijen verschillend zijn.

Booleaanse waardetypen

Booleaanse waarden maken gebruik van logica met drie waarden: TRUE, FALSEen UNKNOWN.

Opmerking

UNKNOWN en de null-waarde zijn hetzelfde. 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:

  • TRUE
  • FALSE
  • UNKNOWN of NULL

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. Deze 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 ondersteunt getekende en ongetekende gehele getallen.

Hoe vergelijking werkt:

Het systeem vergelijkt compatibele exacte numerieke waarden aan de hand 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 ondersteunt geschatte getallen die IEEE (Institute of Electrical and Electronics Engineers) zijn die compatibel zijn met 754 drijvendekommanummers.

Hoe vergelijking werkt:

Het systeem vergelijkt compatibele benaderende numerieke waarden aan de hand van hun numerieke waarde.

Letterlijke waarden voor zwevende komma schrijven:

Description Example Waarde
Algemene notatie 123.456 123.456
Algemene notatie met groepering 123_456.789 123456.789
Wetenschappelijke notatie 1.23456e2 123.456
Wetenschappelijke notatie (hoofdletters) 1.23456E2 123.456
Dubbele precisie met achtervoegsel 123.456d 123.456
Wetenschappelijke notatie met achtervoegsel 2.5e10d 25000000000
Getekende gehele getalnotatie met achtervoegsel -17d -17.0

Belangrijk

Graph ondersteunt de d en D achtervoegsels voor FLOAT64 literals. De en F letterlijke f achtervoegsels worden momenteel niet ondersteund.

Aanvullende numerieke overwegingen:

  • Overflow en underflow: Gehele bewerkingen die het ondersteunde bereik overschrijden, produceren een fout met canonieke GQLSTATUS 22003.
  • Precisie: Drijvendekommabewerkingen kunnen precisie verliezen vanwege IEEE 754-representatiebeperkingen.
  • Speciale float-waarden: Zie Floating-point types voor de Query API-representatie van IEEE 754 speciale waarden.

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 tijdzonegegevens.

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 ]

Duurwaarden

Een duurwaarde geeft een ISO 8601 dagtijdinterval aan. Maak er een door een ISO 8601 duurstring door te geven aan DURATION:

DURATION('P1DT2H30M')

Duurwaarden ondersteunen vergelijking, optelling, aftrekking en schaling. Je kunt ook een duur toevoegen of aftrekken van een gezoneerde datum, of twee gezoneerde datumtijden aftrekken om een duur af te leiden.

Belangrijk

De grafiek ondersteunt dagtijden maar niet jaar-maand duur. De DURATION_BETWEEN(start, end) functie wordt momenteel niet ondersteund; gebruik in plaats daarvan de aftrekoperator tussen gezoneerde datum-tijdwaarden.

Typesyntaxis:

DURATION [ NOT NULL ]

Referentiewaardetypen

Referentiewaarden bevatten verwijzingen naar overeenkomende knooppunten of randen.

Verwijzingswaarden voor knooppunten

Knooppuntverwijzingswaarden vertegenwoordigen verwijzingen naar specifieke knooppunten in uw grafiek. Doorgaans krijgt u deze waarden wanneer knooppunten worden vergeleken in grafiekpatronen. U kunt deze waarden gebruiken om toegang te krijgen tot knooppunteigenschappen en vergelijkingen uit te voeren.

Hoe vergelijking werkt:

Vergelijk knooppuntreferentiewaarden alleen voor gelijkheid. Twee knooppuntreferentiewaarden zijn gelijk als en alleen als ze verwijzen naar hetzelfde knooppunt.

Grafiek definieert een deterministische volgorde ten opzichte van referentiewaarden. Deze volgorde kan echter veranderen van query naar query en u moet er niet op vertrouwen 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, definieert u abstracte knooppunttypen 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 waarbij u overeenkomt 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

Bij de voorgaande query's wordt ervan uitgegaan dat het grafiektype eerder is getekend en dat de voorbeeldgegevensset van het sociale netwerk niet wordt gebruikt.

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 worden vergeleken in grafiekpatronen. U kunt deze waarden 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 edge-verwijzingswaarden zijn alleen gelijk 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 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 houdt hun status bij als groepslijsten.

U kunt groepslijsten gebruiken 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.20m, 3.45m, 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)

-- Test elements against a predicate
ANY(element IN list_var WHERE element IS NOT NULL)

Gebruik de ALL, ANY, NONE, en SINGLE lijst-predicaatfuncties om te testen hoeveel lijstelementen aan een voorwaarde voldoen.

Typesyntaxis:

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

Waar element_type kan elk ondersteund type zijn, zoals STRING, INT64, DOUBLE, BOOL en meer.

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

U kunt padwaarden maken met de PATH [node, edge, node] syntaxis of bindingspaden met MATCH pathVar=...path pattern....

Hoe vergelijking werkt:

Je kunt padwaarden vergelijken voor gelijkheid en ze als sorteersleutels gebruiken. Twee padwaarden zijn gelijk wanneer ze dezelfde reeks knooppunt- en randreferenties bevatten. Vertrouw niet op de relatieve sorteervolgorde van verschillende paden over queries.

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 numerieke waardetypen kunnen impliciet worden omgezet wanneer een expressie een gemeenschappelijke type vereist:

  • Geheel getal en drijfpunt: Het geheel getal wordt omgezet naar een benaderende numerieke type.

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(-42.9m AS INT64)         -- -42
CAST(1.20m AS STRING)         -- "1.20"

Cast-regels:

  • Naar TEKENREEKS: U kunt de meeste waardetypen casten naar STRING met behulp van hun letterlijke weergave.
  • Naar BOOL: U kunt tekenreeksen 'true' of 'false' (hoofdlettergevoelig) casten naar booleaanse waarden.
  • Ongeldige casts: Als u incompatibele waarden probeert te casten, treden runtimefouten op.