Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Denne artikel indeholder en omfattende reference til GQL-værdier og værdityper i graph i Microsoft Fabric.
GQL-sproget understøtter forskellige typer værdier, f.eks. tal, strenge og grafelementer. Disse værdier er organiseret i sæt, der kaldes værdityper, som definerer, hvilke handlinger du kan udføre, og hvordan værdier fungerer i forskellige kontekster. Det er vigtigt at forstå typesystemet for at skrive korrekte forespørgsler og undgå kørselsfejl.
Vigtige oplysninger
Denne artikel bruger udelukkende datasættet for eksempelgrafer på sociale netværk.
Nøglebegreber:
- Værdityper kan være null ellermateriale (kan ikke være null), afhængigt af om de inkluderer eller udelader null-værdien.
-
Værdityper, der ikke kan være null , angives syntaktisk som
NOT NULL. - Den samme værdi kan tilhøre flere værdityper (polymorfi).
- Null-værdien er medlem af alle værdityper, der kan være null.
Notat
Alle værdityper kan som standard være null, medmindre du eksplicit deklarerer dem som NOT NULL.
Angiver f.eks. heltalstypen, INT der kan være null, mens INT NOT NULL angiver materiale heltalstypen.
Sådan organiseres værdityper
Alle værdityper falder i to overordnede kategorier, der tjener forskellige formål i dine forespørgsler:
- Foruddefinerede værdityper – indbygget i sproget, f.eks. tal, strenge og booleske værdier.
- Konstruerede værdityper – sammensat af andre typer, f.eks. lister og stier.
Foruddefinerede værdityper er yderligere organiseret i specialiserede kategorier:
- Booleske værdityper – Sande, falske og ukendte værdier for logiske handlinger.
- Tegnstrengværdityper – Tekstdata med Understøttelse af Unicode.
- Numeriske værdityper – heltal og tal med flydende tal.
- Tidsbestemte værdityper – Dato- og klokkeslætsværdier med understøttelse af tidszone.
- Referenceværdityper – Referencer til noder og kanter i grafen.
- Immaterial value types – Særlige værdier som null og ingenting.
Sådan fungerer lighed og sammenligning
At forstå, hvordan GQL sammenligner værdier, er afgørende for at skrive effektive forespørgsler, især når det drejer sig om filtrering, sortering og joinforbindelser.
Grundlæggende sammenligningsregler
- Du kan generelt sammenligne værdier af samme type.
- Hvis begge værdier er tal, sammenligner GQL dem med deres numeriske værdier.
- Du kan kun sammenligne referenceværdier, der refererer til den samme type objekt, f.eks. nodereferencer med nodereferencer og kantreferencer med kantreferencer.
Vigtige oplysninger
Graph understøtter endnu ikke universel numerisk sammenligning. Heltal kan sammenlignes med omtrentlige tal, men omtrentlige numeriske værdier kan ikke sammenlignes. Sammenligninger mellem signerede og usignerede heltal kan fejle, når en usigneret værdi ligger uden for det signerede heltalsområde.
Null-håndtering i sammenligninger
Når du sammenligner en værdi med null, er resultatet altid UNKNOWN. Null-håndtering følger tre værdibaserede logikprincipper.
ORDER BY håndterer null-placering separat fra sammenligninger. Som standard sorterer nullværdier sidst for både stigende og faldende rækkefølge. Brug NULLS FIRST eller NULLS LAST styr deres placering eksplicit.
Distinktitet i forhold til lighed
Visse udsagn tester ikke for lighed, men tester snarere for distinktitet. Det er vigtigt at forstå forskellen for handlinger som og DISTINCTGROUP BY.
Distinctness-test følger de samme regler som lighed med én afgørende undtagelse: NULL adskiller sig ikke fra NULL. Distinktitet adskiller sig fra lighedstest, der involverer NULL, hvilket altid resulterer i UNKNOWN.
I følgende sætninger bruges distinctness-test:
-
RETURN DISTINCT: Bestemmer, om to rækker er dubletter af hinanden. -
GROUP BY: Bestemmer, om to rækker tilhører den samme grupperingsnøgle under sammenlægning.
To rækker fra en tabel er forskellige, hvis der er mindst én kolonne, hvor værdierne fra begge rækker er forskellige.
Booleske værdityper
Booleske værdier bruger logik med tre værdier: TRUE, FALSEog UNKNOWN.
Notat
UNKNOWN og null-værdien er den samme.
UNKNOWN er blot en null-værdi af typen BOOL.
Sådan fungerer lighed:
| Venstre værdi | Højre værdi | Result |
|---|---|---|
| SANDT | FALSK | FALSK |
| SANDT | SANDT | SANDT |
| SANDT | UKENDT | UKENDT |
| FALSK | FALSK | SANDT |
| FALSK | SANDT | FALSK |
| FALSK | UKENDT | UKENDT |
| UKENDT | FALSK | UKENDT |
| UKENDT | SANDT | UKENDT |
| UKENDT | UKENDT | UKENDT |
Sådan fungerer sammenligning:
FALSE er mindre end TRUE. Alle sammenligninger, der involverer UNKNOWN , resulterer i UNKNOWN.
Sådan skriver du booleske konstanter:
TRUEFALSE-
UNKNOWNellerNULL
Typesyntaks:
BOOL [ NOT NULL ]
Værdityper for tegnstrenge
Tegnstrenge er sekvenser af Unicode-kodepunkter (de kan være længden nul). Den tomme tegnstreng er ikke identisk med null-værdien.
Sådan fungerer sammenligning:
Tegnstrenge sammenlignes ved at sammenligne Unicode-skalarværdierne for deres kodepunkter. Denne sammenligningsmetode kaldes nogle gange sorteringen UCS_BASIC .
Sådan skriver du strengkonstanter:
Omslut tegnene med enten dobbelte anførselstegn (") eller enkelte anførselstegn ('):
"Hello, World!"
'Guten Tag!'
Du kan ikke angive bestemte Unicode-kontroltegn direkte i strengkonstanttegn. Det er specifikt ikke tilladt at bruge alle tegn fra Unicode General Category-klasserne "Cc" og "Cn". Brug i stedet C-style \-escapes:
| Input | Ikke-syndebuket tegn |
|---|---|
\\ |
\ |
\" |
" |
\' |
' |
\` |
` |
\t |
U+0009 |
\b |
U+0008 |
\n |
U+000A |
\r |
U+000D |
\f |
U+000C |
\uabcd |
U+ABCD |
\UABCDEF01 |
U+ABCDEF01 |
GQL understøtter også escaping i SQL-stil ved at fordoble omgivelserne og " tegnene':
| Faktisk streng | C-type | SQL-stil |
|---|---|---|
| Hvor "ironisk!" | "How \"ironic!\"" |
"How ""ironic!""" |
| Hvor ironisk! | 'How \'ironic!\'' |
'How ''ironic!''' |
Tips
Deaktiver C-style \-escapes ved at præfikse strengkonstanten med @.
Typesyntaks:
STRING [ NOT NULL ]
Numeriske typer
Nøjagtige numeriske typer
Grafen understøtter signerede og usignerede heltal.
Sådan fungerer sammenligning:
Systemet sammenligner kompatible eksakte numeriske værdier ved deres numeriske værdi.
Sådan skriver du heltalskonstanter:
| Beskrivelse | Eksempel | Værdi |
|---|---|---|
| Heltal | 123456 | 123456 |
| Heltal med gruppering | 123_456 | 123456 |
| Eksplicit positivt heltal | +123456 | 123456 |
| Nul | 0 | 0 |
| Negativt heltal | -123456 | -123456 |
Typesyntaks:
INT [ NOT NULL ]
INT64 [ NOT NULL ]
UINT [ NOT NULL ]
UINT64 [ NOT NULL ]
INT og INT64 angive den samme numeriske type.
Så gør UINT og UINT64.
Omtrentlige numeriske typer
Graph understøtter omtrentlige tal, der er IEEE (Institute of Electrical and Electronics Engineers) 754-kompatible flydende tal.
Sådan fungerer sammenligning:
Systemet sammenligner kompatible tilnærmede numeriske værdier ved deres numeriske værdi.
Sådan skriver du konstanter med flydende tal:
| Beskrivelse | Eksempel | Værdi |
|---|---|---|
| Fælles notation | 123.456 | 123.456 |
| Fælles notation med gruppering | 123_456.789 | 123456.789 |
| Videnskabelig notation | 1.23456e2 | 123.456 |
| Videnskabelig notation (stort) | 1.23456E2 | 123.456 |
| Dobbelt præcision med suffiks | 123.456d | 123.456 |
| Videnskabelig notation med suffiks | 2.5e10d | 25000000000 |
| Signeret heltalsnotation med suffiks | -17d | -17.0 |
Vigtige oplysninger
Graph understøtter d og D suffikser for FLOAT64 literaler. Og bogstavelige fF suffikser understøttes ikke i øjeblikket.
Yderligere numeriske overvejelser:
-
Overflow og underflow: Heltalsoperationer, der overstiger det understøttede interval, giver en fejl med kanonisk GQL-status
22003. - Præcision: Flydende talhandlinger kan miste præcision på grund af begrænsninger for repræsentation i IEEE 754.
- Særlige flydende værdier: Se flydende komma-typer for Query API-repræsentationen af IEEE 754 specialværdier.
Typesyntaks:
FLOAT [ NOT NULL ]
DOUBLE [ NOT NULL ]
FLOAT64 [ NOT NULL ]
DOUBLE, FLOATog FLOAT64 alle angiver den samme type.
Tidsmæssige værdityper
Zoned datetime-værdier
En zoned datetime-værdi repræsenterer en ISO 8601-kompatibel datetime med en tidszoneforskydning.
Sådan fungerer sammenligning:
Systemet sammenligner zoneopdelte datetime-værdier kronologisk med deres absolutte klokkeslætspunkter.
Sådan skriver du datetime-konstanter:
Brug ISO 8601-formatet sammen med tidszoneoplysninger.
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 ]
Varighedsværdier
En varighedsværdi repræsenterer et ISO 8601 dagtidsinterval. Opret en ved at sende en ISO 8601-varighedsstreng til DURATION:
DURATION('P1DT2H30M')
Varighedsværdier understøtter sammenligning, addition, subtraktion og skalering. Du kan også tilføje eller trække en varighed fra en zoneinddelt dato, eller trække to zonede datotidspunkter fra for at udlede en varighed.
Vigtige oplysninger
Grafen understøtter dagtidsvarigheder, men ikke år-måned-varigheder. Funktionen DURATION_BETWEEN(start, end) understøttes ikke i øjeblikket; brug i stedet subtraktionsoperatoren mellem zonerede dato-tid-værdier.
Typesyntaks:
DURATION [ NOT NULL ]
Referenceværdityper
Referenceværdier indeholder referencer til matchende noder eller kanter.
Nodereferenceværdier
Nodereferenceværdier repræsenterer referencer til bestemte noder i din graf. Du får typisk disse værdier, når noder matches i grafmønstre. Du kan bruge disse værdier til at få adgang til nodeegenskaber og udføre sammenligninger.
Sådan fungerer sammenligning:
Sammenlign kun nodereferenceværdier for lighed. To nodereferenceværdier er ens, hvis og kun hvis de refererer til den samme node.
Graph definerer en deterministisk rækkefølge over referenceværdier. Denne rækkefølge kan dog ændres fra forespørgsel til forespørgsel, og du bør ikke stole på den i produktionsforespørgsler.
Sådan får du adgang til egenskaber:
Brug punktnotation til at få adgang til nodeegenskaber:
node_var.property_name
Abstrakte nodetyper i grafskemaer:
Når du arbejder med graftyper, skal du definere abstrakte nodetyper, der fungerer som basistyper for nedarvning, men som ikke kan instantieres direkte. Abstrakte typer muliggør polymorfe forespørgselsmø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 forespørgsler med abstrakte typer:
Abstrakte typer muliggør effektive forespørgselsmønstre, hvor du matcher med basistypen for at finde alle forekomster af afledte 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
Notat
De foregående forespørgsler forudsætter den graftype, der er skitseret tidligere, og bruger ikke datasættet med eksemplet på det sociale netværk.
Denne fremgangsmåde giver typesikkerhed og muliggør fleksibel, nedarvningsbaseret datamodellering i dine grafskemaer.
Typesyntaks:
NODE [ NOT NULL ]
Referenceværdier for grafkant
Referenceværdier for grafkant repræsenterer referencer til bestemte kanter i grafen. Du får typisk disse værdier, når kanter matches i grafmønstre. Du kan bruge disse værdier til at få adgang til kantegenskaber og udføre sammenligninger.
Sådan fungerer sammenligning:
Du kan kun sammenligne kantreferenceværdier for lighed. To kantreferenceværdier er kun ens, hvis de refererer til den samme kant.
Sådan får du adgang til egenskaber:
Brug punktnotation til at få adgang til kantegenskaber:
edge_var.property_name
Typesyntaks:
EDGE [ NOT NULL ]
Typer af immateriel værdi
Immaterielle værdityper indeholder ikke "almindelige" materialeværdier.
Null-værdier
Null-værdien repræsenterer fraværet af en kendt materialeværdi. Det er medlem af alle værdityper, der kan være null, og adskiller sig fra enhver materialeværdi. Det er den eneste værdi af null-typen.
Sådan fungerer sammenligning:
Når du sammenligner en værdi med null, er UNKNOWNresultatet .
Sådan skriver du null-konstanter:
NULL -- type NULL
UNKNOWN -- type BOOL
Typesyntaks:
NULL
Intet type
Intet-typen er en værditype, der ikke indeholder nogen værdier.
Selvom det kan se ud som en teknikalitet, kan du bruge intet-typen til at tildele en præcis type til værdier som tomme listeværdier. Intet-typen giver dig mulighed for at overføre tomme lister, uanset hvor en listeværditype forventes (uanset den påkrævede listeelementtype).
Typesyntaks:
NOTHING
NULL NOT NULL
(NOTHING og NULL NOT NULL angive den samme type)
Konstruerede værdityper
Vis værdier
Listeværdier er sekvenser af elementer. Lister kan indeholde elementer af samme type og kan indeholde null-værdier.
Vigtige oplysninger
Lister i grafen kan i øjeblikket ikke indeholde elementer af blandede typer.
Sådan fungerer sammenligning:
Lister sammenlignes først efter størrelse og derefter element efter element i rækkefølge. To lister er ens, hvis de har samme størrelse, og alle tilsvarende elementer er ens.
Tips
Sammenligninger, der involverer null-elementværdier, resulterer altid i UNKNOWN. Null-sammenligninger kan give overraskende resultater, når listeværdier sammenlignes.
Gruppelister:
Gruppelister er lister, der er bundet af matchende kantmønstre med variabel længde. Graph sporer deres status som gruppelister.
Du kan bruge gruppelister i vandret aggregering. Du kan få flere oplysninger under GQL-udtryk og -funktioner.
Sådan skriver du listekonstanter:
Brug kantet parentesnotation til at oprette lister:
[1, 2, 3, 4]
['hello', 'world']
[1.20m, 3.45m, NULL]
[] -- empty list
Sådan får du adgang til elementer:
Brug kantede parenteser med nulbaseret indeksering til at få adgang til listeelementer:
list_var[0] -- first element
list_var[1] -- second element
Almindelige listehandlinger:
-- 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)
Brug , ANY, NONE, og SINGLE listeprædikatfunktionerneALL til at teste, hvor mange listeelementer der opfylder 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 understøttet type, f.eks. STRING, INT64, DOUBLE, BOOL og meget mere.
Stiværdier
Stiværdier repræsenterer stier, der svarer til i grafen. En stiværdi indeholder en ikke-mpty sekvens af skiftende node- og kantreferenceværdier, der altid starter og slutter med en nodereferenceværdi. Disse referenceværdier identificerer noderne og kanterne af den oprindeligt tilsvarende sti i grafen.
Sådan struktureres stier:
En sti består af:
- En sekvens af noder og kanter:
node₁ - edge₁ - node₂ - edge₂ - ... - nodeₙ - Starter og slutter altid med en node.
- Indeholder mindst én node (den mindste stilængde er nul kanter).
Notat
Du kan konstruere stiværdier med syntaksen PATH [node, edge, node] eller binde stier med MATCH pathVar=...path pattern....
Sådan fungerer sammenligning:
Du kan sammenligne stiværdier for lighed og bruge dem som sorteringsnøgler. To stiværdier er ens, når de indeholder den samme sekvens af node- og kantreferencer. Stol ikke på den relative sorteringsrækkefølge af forskellige stier på tværs af forespørgsler.
Typesyntaks:
PATH [ NOT NULL ]
Typekonverteringer og casting
GQL understøtter både implicitte og eksplicitte typekonverteringer for at muliggøre fleksible handlinger, samtidig med at typesikkerheden bevares.
Implicitte konverteringer
Visse numeriske værdityper kan implicit konverteres, når et udtryk kræver en fælles type:
- Heltal og flydende komma: Heltallet konverteres til en tilnærmet numerisk type.
Eksplicit casting
Brug funktionen CAST til eksplicit at konvertere værdier mellem 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 STRING: Du kan konvertere de fleste værdityper til STRING ved hjælp af deres konstantrepræsentation.
- Til BOOL: Du kan konvertere strengene 'true' eller 'false' (forskel på store og små bogstaver) til booleske værdier.
- Ugyldige casts: Hvis du forsøger at caste inkompatible værdier, opstår der kørselsfejl.