Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen inneholder en omfattende referanse for GQL-verdier og verdityper i grafen i Microsoft Fabric.
GQL-språket støtter ulike typer verdier som tall, strenger og grafelementer. Disse verdiene er organisert i sett kalt verdityper, som definerer hvilke operasjoner du kan utføre, og hvordan verdier fungerer i ulike kontekster. Det er viktig å forstå typesystemet for å skrive riktige spørringer og unngå kjøretidsfeil.
Viktig!
Denne artikkelen bruker utelukkende eksempeldatasett for sosiale nettverk.
Nøkkelkonsepter:
- Verdityper kan være nullstillbare eller material (ikke-nullbare), avhengig av om de inkluderer eller utelater nullverdien.
-
Verdityper som ikke kan nullstilles , angis syntaktisk som
NOT NULL. - Den samme verdien kan tilhøre flere verdityper (polymorfisme).
- Nullverdien er medlem av alle verdityper som kan nullstilles.
Note
Alle verdityper kan nullstilles som standard, med mindre du eksplisitt erklærer dem som NOT NULL.
Angir for eksempel INT heltallstypen null, mens INT NOT NULL angir material heltallstypen.
Slik organiseres verdityper
Alle verdityper faller inn i to hovedkategorier som tjener ulike formål i spørringene:
- Forhåndsdefinerte verdityper – innebygd i språket, for eksempel tall, strenger og boolske verdier.
- Konstruerte verdityper – skrevet fra andre typer, for eksempel lister og baner.
Forhåndsdefinerte verdityper er mer organisert i spesialiserte kategorier:
- Boolske verdityper – sann, usann og ukjente verdier for logiske operasjoner.
- Verdityper for tegnstreng – tekstdata med Støtte for Unicode.
- Numeriske verdityper – heltall og flyttall.
- Tidsverdityper – dato- og klokkeslettverdier med tidssonestøtte.
- Referanseverdityper – Referanser til noder og kanter i grafen.
- Uvesentlige verdityper – spesielle verdier som null og ingenting.
Slik fungerer likhet og sammenligning
Å forstå hvordan GQL sammenligner verdier er avgjørende for å skrive effektive spørringer, spesielt når du arbeider med filtrering, sortering og sammenføyninger.
Grunnleggende sammenligningsregler
- Du kan vanligvis sammenligne verdier av samme type.
- Hvis begge verdiene er tall, sammenligner GQL dem med deres numeriske verdier.
- Du kan bare sammenligne referanseverdier som refererer til samme type objekt, for eksempel nodereferanser med nodereferanser og kantreferanser med kantreferanser.
Viktig!
Grafen støtter ennå ikke universell numerisk sammenligning. Heltall kan sammenlignes med omtrentlige tall, men omtrentlige numeriske verdier kan ikke sammenlignes. Sammenligninger mellom signerte og usignerte heltall kan feile når en usignert verdi ligger utenfor det signerte heltallsområdet.
Nullhåndtering i sammenligninger
Når du sammenligner en verdi med null, er resultatet alltid UNKNOWN. Nullhåndtering følger treverdige logikkprinsipper.
ORDER BY håndterer nullplassering separat fra sammenligninger. Som standard sorterer nullverdier sist for både stigende og synkende rekkefølge. Bruk NULLS FIRST eller NULLS LAST kontrollerer plasseringen deres eksplisitt.
Distinctness kontra likhet
Visse uttalelser tester ikke for likestilling, men tester heller for distinkthet. Det er viktig å forstå forskjellen for operasjoner som DISTINCT og GROUP BY.
Distinctness-testing følger de samme reglene som likhet med ett avgjørende unntak: NULL er ikke forskjellig fra NULL. Distinctness skiller seg fra likhetstester som involverer NULL, noe som alltid resulterer i UNKNOWN.
Følgende setninger bruker distinkthetstesting:
-
RETURN DISTINCT: Bestemmer om to rader er duplikater av hverandre. -
GROUP BY: Bestemmer om to rader tilhører samme grupperingsnøkkel under aggregasjon.
To rader fra en tabell er distinkte hvis det er minst én kolonne der verdiene fra begge radene er distinkte.
Boolske verdityper
Boolske verdier bruker logikk med tre verdier: TRUE, FALSEog UNKNOWN.
Note
UNKNOWN og nullverdien er den samme.
UNKNOWN er bare en nullverdi av typen BOOL.
Slik fungerer likestilling:
| Venstre verdi | Høyre verdi | Resultat |
|---|---|---|
| SANN | FALSK | FALSK |
| SANN | SANN | SANN |
| SANN | UKJENT | UKJENT |
| FALSK | FALSK | SANN |
| FALSK | SANN | FALSK |
| FALSK | UKJENT | UKJENT |
| UKJENT | FALSK | UKJENT |
| UKJENT | SANN | UKJENT |
| UKJENT | UKJENT | UKJENT |
Slik fungerer sammenligning:
FALSE er mindre enn TRUE. Alle sammenligninger som involverer, resulterer UNKNOWN i UNKNOWN.
Slik skriver du boolske litteraler:
TRUEFALSE-
UNKNOWNellerNULL
Typesyntaks:
BOOL [ NOT NULL ]
Verdityper for tegnstreng
Tegnstrenger er sekvenser av Unicode-kodepunkter (de kan være tomme). Den tomme tegnstrengen er ikke identisk med nullverdien.
Slik fungerer sammenligning:
Tegnstrenger sammenlignes ved å sammenligne Unicode-skalarverdiene for kodepunktene. Denne sammenligningsmetoden kalles noen ganger sorteringen UCS_BASIC .
Slik skriver du strenglitteraler:
Omslutte tegnene i doble anførselstegn (") eller enkle anførselstegn ('):
"Hello, World!"
'Guten Tag!'
Du kan ikke angi bestemte Unicode-kontrolltegn direkte i strenglitteraler. Spesielt er alle tegn fra Unicode Generelle kategoriklasser "Kopi" og "Cn" ikke tillatt. Bruk i stedet C-stil \-escapes:
| Inndata | Ulandskapt tegn |
|---|---|
\\ |
\ |
\" |
" |
\' |
' |
\` |
` |
\t |
U+0009 |
\b |
U+0008 |
\n |
U+000A |
\r |
U+000D |
\f |
U+000C |
\uabcd |
U+ABCD |
\UABCDEF01 |
U+ABCDEF01 |
GQL støtter også rømmer i SQL-stil ved å doble omgivelsene " og ' tegnene:
| Faktisk streng | C-stil | SQL-stil |
|---|---|---|
| Hvordan "Ironisk!" | "How \"ironic!\"" |
"How ""ironic!""" |
| Hvordan 'Ironisk!' | 'How \'ironic!\'' |
'How ''ironic!''' |
Tips
Deaktiver C-stil \-escapes ved å prefiksere strenglitteralen med @.
Typesyntaks:
STRING [ NOT NULL ]
Numeriske typer
Eksakte numeriske typer
Graph støtter signerte og usignerte heltall.
Slik fungerer sammenligning:
Systemet sammenligner kompatible eksakte numeriske verdier ved deres numeriske verdi.
Slik skriver du heltallslitteraler:
| Beskrivelse | Eksempel | Verdi |
|---|---|---|
| Heltall | 123456 | 123456 |
| Heltall med gruppering | 123_456 | 123456 |
| Eksplisitt positivt heltall | +123456 | 123456 |
| Null | 0 | 0 |
| Negativt heltall | -123456 | -123456 |
Typesyntaks:
INT [ NOT NULL ]
INT64 [ NOT NULL ]
UINT [ NOT NULL ]
UINT64 [ NOT NULL ]
INT og INT64 angi samme numeriske type.
Så gjør UINT og UINT64.
Omtrentlige numeriske typer
Graph støtter omtrentlige tall som er IEEE (Institute of Electrical and Electronics Engineers) 754-kompatible flytende punkttall.
Slik fungerer sammenligning:
Systemet sammenligner kompatible tilnærmede numeriske verdier ved deres numeriske verdi.
Slik skriver du flytende punkt-litteraler:
| Beskrivelse | Eksempel | Verdi |
|---|---|---|
| Vanlig notasjon | 123.456 | 123.456 |
| Vanlig notasjon med gruppering | 123_456.789 | 123456.789 |
| Vitenskapelig notasjon | 1.23456e2 | 123.456 |
| Vitenskapelig notasjon (store bokstaver) | 1.23456E2 | 123.456 |
| Dobbel presisjon med suffiks | 123.456d | 123.456 |
| Vitenskapelig notasjon med suffiks | 2.5e10d | 25000000000 |
| Signert heltallsnotasjon med suffiks | -17d | -17.0 |
Viktig!
Graph støtter d og D suffiksene for FLOAT64 literaler. Og F bokstavelige f suffikser støttes ikke for øyeblikket.
Flere numeriske hensyn:
-
Overflow og underflow: Heltalsoperasjoner som overstiger det støttede området gir en feil med kanonisk GQLSTATUS
22003. - Presisjon: Flyttallsoperasjoner kan miste presisjon på grunn av IEEE 754-representasjonsbegrensninger.
- Spesielle flyttallsverdier: Se Flyttallstyper for Query API-representasjonen av IEEE 754 spesialverdier.
Typesyntaks:
FLOAT [ NOT NULL ]
DOUBLE [ NOT NULL ]
FLOAT64 [ NOT NULL ]
DOUBLE, FLOATog FLOAT64 alle angir samme type.
Tidsmessige verdityper
Regulerte datetime-verdier
En regulert datetime-verdi representerer en ISO 8601-kompatibel datetime med en tidssoneforskyvning.
Slik fungerer sammenligning:
Systemet sammenligner sonede datetime-verdier kronologisk med absolutte tidspunkter.
Slik skriver du datetime-litteraler:
Bruk ISO 8601-format med tidssoneinformasjon.
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')
Typesyntaks:
ZONED DATETIME [ NOT NULL ]
Varighetsverdier
En varighetsverdi representerer et ISO 8601 dagtidsintervall. Lag en ved å sende en ISO 8601-varighetsstreng til DURATION:
DURATION('P1DT2H30M')
Varighetsverdier støtter sammenligning, addisjon, subtraksjon og skalering. Du kan også legge til eller trekke fra en varighet fra en sonert dato, eller trekke fra to sonebaserte datoer for å finne en varighet.
Viktig!
Grafen støtter dagtidsvarigheter, men ikke år-måned-varigheter. Funksjonen DURATION_BETWEEN(start, end) støttes ikke for øyeblikket; bruk subtraksjonsoperatoren mellom sonerte dato-tid-verdier i stedet.
Typesyntaks:
DURATION [ NOT NULL ]
Referanseverdityper
Referanseverdier inneholder referanser til samsvarende noder eller kanter.
Nodereferanseverdier
Nodereferanseverdier representerer referanser til bestemte noder i grafen. Du får vanligvis disse verdiene når noder samsvarer i grafmønstre. Du kan bruke disse verdiene til å få tilgang til nodeegenskaper og utføre sammenligninger.
Slik fungerer sammenligning:
Sammenlign nodereferanseverdier bare for likhet. To nodereferanseverdier er like hvis og bare hvis de refererer til samme node.
Graph definerer en deterministisk rekkefølge over referanseverdier. Denne rekkefølgen kan imidlertid endres fra spørring til spørring, og du bør ikke stole på den i produksjonsspørringer.
Slik får du tilgang til egenskaper:
Bruk punkt notasjon for å få tilgang til nodeegenskaper:
node_var.property_name
Abstrakte nodetyper i grafskjemaer:
Når du arbeider med graftyper, definerer du abstrakte nodetyper som fungerer som basistyper for arv, men som ikke kan startes direkte. Abstrakte typer aktiverer polymorfe spørringsmønstre:
-- 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 spørringer med abstrakte typer:
Abstrakte typer aktiverer kraftige spørringsmønstre der du samsvarer med basistypen for å finne alle forekomster av avledede typer:
-- 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
Note
De foregående spørringene forutsetter at graftypen ble skissert tidligere og ikke bruker datasettet for det sosiale nettverket.
Denne fremgangsmåten gir typesikkerhet samtidig som du aktiverer fleksibel, arvebasert datamodellering i grafskjemaene.
Typesyntaks:
NODE [ NOT NULL ]
Referanseverdier for grafkant
Referanseverdier for grafkant representerer referanser til bestemte kanter i grafen. Du får vanligvis disse verdiene når kanter samsvarer i grafmønstre. Du kan bruke disse verdiene til å få tilgang til kantegenskaper og utføre sammenligninger.
Slik fungerer sammenligning:
Du kan bare sammenligne kantreferanseverdier for likhet. To kantreferanseverdier er bare like hvis de refererer til samme kant.
Slik får du tilgang til egenskaper:
Bruk punkt notasjon for å få tilgang til egenskaper for kant:
edge_var.property_name
Typesyntaks:
EDGE [ NOT NULL ]
Uvesentlige verdityper
Uvesentlige verdityper inneholder ikke vanlige materialverdier.
Nullverdier
Nullverdien representerer fraværet av en kjent materialverdi. Det er medlem av alle verdityper som kan nullstilles, og er forskjellig fra enhver materialverdi. Det er den eneste verdien av nulltypen.
Slik fungerer sammenligning:
Når du sammenligner en verdi med null, er UNKNOWNresultatet .
Slik skriver du nulllitteraler:
NULL -- type NULL
UNKNOWN -- type BOOL
Typesyntaks:
NULL
Ingenting type
Ingenting-typen er en verditype som ikke inneholder noen verdier.
Selv om det kan virke som en formalitet, lar ingenting-typen deg tilordne en nøyaktig type til verdier som tomme listeverdier. Med ingenting-typen kan du sende tomme lister uansett hvor en listeverditype forventes (uavhengig av den nødvendige listeelementtypen).
Typesyntaks:
NOTHING
NULL NOT NULL
(NOTHING og NULL NOT NULL angi samme type)
Konstruerte verdityper
Listeverdier
Listeverdier er sekvenser av elementer. Lister kan inneholde elementer av samme type og kan inneholde nullverdier.
Viktig!
Lister i grafen kan for øyeblikket ikke inneholde elementer av blandede typer.
Slik fungerer sammenligning:
Lister sammenlignes først etter størrelse, og deretter element etter element i rekkefølge. To lister er like hvis de har samme størrelse og alle tilsvarende elementer er like.
Tips
Sammenligninger som involverer nullelementverdier, resulterer alltid i UNKNOWN. Nullsammenligninger kan føre til overraskende resultater når du sammenligner listeverdier.
Gruppelister:
Gruppelister er lister som er bundet av samsvarende kantmønstre med variabel lengde. Graph sporer statusen som gruppelister.
Du kan bruke gruppelister i vannrett aggregasjon. Hvis du vil ha mer informasjon, kan du se GQL-uttrykk og -funksjoner.
Slik skriver du listelitteraler:
Bruk hakeparentes-notasjon til å opprette lister:
[1, 2, 3, 4]
['hello', 'world']
[1.20m, 3.45m, NULL]
[] -- empty list
Slik får du tilgang til elementer:
Bruk hakeparenteser med nullbasert indeksering for å få tilgang til listeelementer:
list_var[0] -- first element
list_var[1] -- second element
Vanlige listeoperasjoner:
-- 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)
Bruk ALL, ANY, NONE, og SINGLE listepredikatfunksjonene for å teste hvor mange listeelementer som oppfyller en betingelse.
Typesyntaks:
LIST<element_type> [ NOT NULL ]
LIST<element_type NOT NULL> [ NOT NULL ]
Hvor element_type kan være en hvilken som helst støttet type, for eksempel STRING, INT64, DOUBLE, BOOL og mer.
Baneverdier
Baneverdier representerer baner som samsvarer i grafen. En baneverdi inneholder en ikke-mpty sekvens av vekslende node- og kantreferanseverdier som alltid starter og slutter med en nodereferanseverdi. Disse referanseverdiene identifiserer nodene og kantene til den opprinnelig samsvarende banen i grafen.
Slik strukturerer du baner:
En bane består av:
- En sekvens med noder og kanter:
node₁ - edge₁ - node₂ - edge₂ - ... - nodeₙ - Starter og slutter alltid med en node.
- Inneholder minst én node (minimum banelengde er null kanter).
Note
Du kan konstruere baneverdier med syntaksen PATH [node, edge, node] eller binde baner med MATCH pathVar=...path pattern....
Slik fungerer sammenligning:
Du kan sammenligne stiverdier for likhet og bruke dem som sorteringsnøkler. To stiverdier er like når de inneholder samme sekvens av node- og kantreferanser. Ikke stol på den relative sorteringsrekkefølgen av ulike stier på tvers av spørringer.
Typesyntaks:
PATH [ NOT NULL ]
Skriv inn konverteringer og avstøpning
GQL støtter både implisitte og eksplisitte typekonverteringer for å aktivere fleksible operasjoner samtidig som typesikkerhet opprettholdes.
Implisitte konverteringer
Visse numeriske verdityper kan implisitt konverteres når et uttrykk krever en felles type:
- Heltall og flyttall: Heltallet konverteres til en tilnærmet numerisk type.
Eksplisitt avstøpning
CAST Bruk funksjonen til eksplisitt å konvertere verdier mellom kompatible typer:
CAST(value AS target_type)
Eksempler:
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"
Regler for casting:
- Til STRENG: Du kan angi de fleste verdityper til STRING ved hjelp av litteral representasjon.
- Til BOOL: Du kan gi strenger «sann» eller «usann» (skiller ikke mellom store og små bokstaver) til boolske verdier.
- Ugyldige avstøpninger: Hvis du prøver å kaste inkompatible verdier, oppstår kjøretidsfeil.