Del via


GQL-værdier og værdityper

Notat

Denne funktion er i øjeblikket tilgængelig som offentlig prøveversion. Denne prøveversion leveres uden en serviceniveauaftale og anbefales ikke til produktionsarbejdsbelastninger. Visse funktioner understøttes muligvis ikke eller kan have begrænsede funktioner. Du kan finde flere oplysninger under Supplerende vilkår for anvendelse af Microsoft Azure Previews.

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 de udtrykkeligt er erklæret 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 (lister, 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.
  • Alle tal kan sammenlignes med hinanden (f.eks. heltal med flydende værdier).
  • Det er kun referenceværdier, der refererer til den samme type objekt, der kan sammenlignes (nodereferencer med nodereferencer, kantreferencer med kantreferencer).

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. Sætningen ORDER BY behandler dog som den mindste værdi, når der sorteres NULL , hvilket giver forudsigelig funktionsmåde for sortering.

Distinktitet i forhold til lighed

Visse udsagn tester ikke for lighed, men 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.

Distinkthedstest bruges af:

  • 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 anses for at være forskellige, hvis der er mindst én kolonne, hvor værdierne fra begge rækker er forskellige.

Booleske værdityper

Booleske værdier er de tre værdier for logikværdierne TRUE, FALSEog UNKNOWN.

Notat

UNKNOWN og null-værdien er identiske. 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:

  • TRUE
  • FALSE
  • UNKNOWN eller NULL

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 (sammenligningsmetoden 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

Graph i Microsoft Fabric understøtter præcise tal, der er negative eller positive heltal.

Sådan fungerer sammenligning:

Systemet sammenligner alle tal med 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 i Microsoft Fabric understøtter omtrentlige tal, der er IEEE (Institute of Electrical and Electronics Engineers) 754-kompatible flydende tal.

Sådan fungerer sammenligning:

Systemet sammenligner alle tal med 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 m. gruppering 123_456.789 123456.789
Videnskabelig notation 1.23456e2 123.456
Videnskabelig notation (stort) 1.23456E2 123.456
Flydende tal med suffiks 123.456f 123.456
Dobbelt præcision med suffiks 123.456d 123.456

Yderligere numeriske overvejelser:

  • Overløb og underløb: Heltalshandlinger, der overskrider det understøttede interval, kan resultere i kørselsfejl eller ombrydningsfunktion, afhængigt af implementeringen.
  • Præcision: Flydende talhandlinger kan miste præcision på grund af begrænsninger for repræsentation i IEEE 754.
  • Særlige flydende værdier: NaN (Ikke et tal), positiv uendelighed (+∞) og negativ uendelighed (-∞) kan understøttes i kontekster med flydende tal.

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 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 ]

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, og du kan bruge dem til at få adgang til nodeegenskaber og udføre sammenligninger.

Sådan fungerer sammenligning:

Du bør kun sammenligne nodereferenceværdier for lighed. To nodereferenceværdier er ens, hvis og kun hvis de refererer til den samme node.

Graph i Microsoft Fabric definerer en deterministisk rækkefølge for referenceværdier. Denne rækkefølge kan dog ændres fra forespørgsel til forespørgsel og bør ikke anvendes 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, kan 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 kan matche 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 antager den graftype, der er skitseret ovenfor, og bruger ikke datasættet for 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, og du kan bruge dem 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 lige, hvis og kun 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 i Microsoft Fabric 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 i Microsoft Fabric sporer deres status som gruppelister.

Gruppelister kan bruges 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, 'mixed', TRUE, 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)

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

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

Den konstante syntaks for stier understøttes endnu ikke. I stedet kan stier bindes ved hjælp af MATCH pathVar=...path pattern....

Sådan fungerer sammenligning:

Stier sammenlignes ved at sammenligne lister af referenceværdier med alle deres bestanddele noder og kanter i den rækkefølge, hvor de forekommer langs stien.

Se sammenligningsreglerne for listeværdier og referenceværdier for yderligere detaljer.

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 værdityper kan konverteres implicit, når konverteringen er sikker og ikke mister oplysninger:

  • Numerisk udvidelse: Heltalsværdier kan implicit konverteres til flydende taltyper, når de bruges i blandede aritmetiske handlinger.
  • Strengkontekster: Værdier kan implicit konverteres til strenge i visse kontekster, f.eks. sammenkædningshandlinger.

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

Regler for casting:

  • Til STRING: De fleste værdityper kan konverteres til STRING med deres konstantrepræsentation.
  • Til numeriske typer: Strenge, der indeholder gyldige numeriske konstanter, kan konverteres til relevante numeriske typer.
  • Til BOOL: Strengene 'true'/'false' (forskel på store og små bogstaver) kan konverteres til booleske værdier.
  • Ugyldige casts: Forsøg på at caste inkompatible værdier resulterer i kørselsfejl.