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.
Dit artikel is een beknopt overzicht van de syntaxis van GQL (Graph Query Language) voor grafiek in Microsoft Fabric. Gebruik het om syntaxis en standaardinstellingen te herinneren. Voor een volledige uitleg, zie de GQL-taalgids; elke sectie linkt naar de gerichte referentie die de volledige details bevat.
Opmerking
In dit artikel wordt voornamelijk gebruikgemaakt van de grafiekgegevensset voor sociale netwerken. Het bevat ook enkele voorbeelden die gebruikmaken van de Adventure Works-gegevensset uit de grafiekzelfstudie.
Querystructuur
GQL-query's maken gebruik van een reeks instructies die bepalen welke gegevens uit de grafiek moeten worden opgehaald, hoe deze moeten worden verwerkt en hoe de resultaten worden weergegeven. Elke instructie heeft een specifiek doel en samen maken ze een lineaire pijplijn die overeenkomt met gegevens uit de grafiek en deze stap voor stap transformeert.
Typische querystroom:
Een GQL-query begint meestal door het grafiekpatroon op te geven dat overeenkomt. Vervolgens worden optionele instructies gebruikt voor het maken, filteren, sorteren, pagineren en resultaatuitvoer van variabelen.
Voorbeeld:
MATCH (n:Person)-[:knows]->(m:Person)
LET fullName = n.firstName || ' ' || n.lastName
FILTER m.gender = 'female'
ORDER BY fullName ASC
OFFSET 10
LIMIT 5
RETURN fullName, m.firstName
Stelling:
Belangrijk
Statements vormen een geordende pijplijn en kunnen niet willekeurig worden herschikt. Zie het artikel over huidige beperkingen.
-
MATCH– Geef grafiekpatronen op die moeten worden gevonden. -
LET– Definieer variabelen uit expressies. -
FOR– Een lijst uitbreiden tot rijen. -
CALL– Voer een inline subquery uit en voeg de geretourneerde kolommen toe. -
FILTER– Overeenkomende voorwaarden voor rijen behouden. -
WHEN– Routeer elke invoerrij naar de eerste overeenkomende conditionele tak. -
ORDER BY– Resultaten sorteren. -
OFFSET– Veel rijen overslaan. -
LIMIT– Beperk het aantal rijen. -
RETURN– De uiteindelijke resultaten uitvoeren. -
NEXT– Start een nieuwe queryfase door gebruik te maken van de kolommen die door de voorgaande fase zijn teruggegeven.
Elke instructie is gebaseerd op de vorige instructie, dus u kunt de query-uitvoer incrementeel verfijnen en vormgeven. Gebruik UNION, UNION DISTINCT, of UNION ALL om volledige queryblokken te combineren. Zie de volgende secties voor meer informatie over elke instructie.
Query-opdrachten
MATCH
Zoek grafiekpatronen in uw gegevens.
Syntaxis:
MATCH <graph pattern> [ WHERE <predicate> ]
...
Voorbeeld:
MATCH (n:Person)-[:knows]-(m:Person) WHERE n.birthday > 2000
RETURN *
Zie de MATCH voor meer informatie over de instructie.
LATEN
Maak variabelen met behulp van expressies.
Syntaxis:
LET <variable> = <expression>, <variable> = <expression>, ...
...
Voorbeeld:
MATCH (n:Person)
LET fullName = n.firstName || ' ' || n.lastName
RETURN fullName
Zie de LET voor meer informatie over de instructie.
FOR
Een lijst wordt uitgebreid tot rijen en geeft optioneel de positie van elk element terug.
Syntaxis:
FOR <variable> IN <list_expression>
[ WITH OFFSET <offset_variable> | WITH ORDINALITY <ordinality_variable> ]
...
Voorbeeld:
FOR value IN [10, 20] WITH OFFSET index
RETURN value, index
WITH OFFSET begint bij 0.
WITH ORDINALITY begint bij 1.
Zie de FOR voor meer informatie over de instructie.
CALL
Voert een inline subquery uit voor elke invoerrij. Variabelen die al binnen de scope vallen, zijn impliciet beschikbaar binnen de subquery.
Syntaxis:
[ OPTIONAL ] CALL {
<query statements>
RETURN <columns>
}
...
Van de variabelen die binnen de subquery worden aangemaakt, zijn alleen kolommen uit de eindstatement RETURN buiten deze stelling beschikbaar. Ordinary CALL laat een buitenste rij vallen wanneer de subquery geen rijen teruggeeft en vermenigvuldigt deze wanneer de subquery meerdere rijen teruggeeft.
OPTIONAL CALL behoudt een buitenste rij met NULL subquerykolommen wanneer de subquery geen rijen teruggeeft.
MATCH (p:Person)
CALL {
MATCH (p)-[:knows]->(friend:Person)
RETURN count(*) AS friendCount
}
RETURN p.firstName, friendCount
Voor meer informatie over inline subqueries, zie de GQL-taalgids.
FILTEREN
Hiermee worden rijen bijgehouden die overeenkomen met voorwaarden.
Syntaxis:
FILTER [ WHERE ] <predicate>
...
Voorbeeld:
MATCH (n:Person)-[:knows]->(m:Person)
FILTER WHERE n.birthday > m.birthday
RETURN *
Zie de FILTER voor meer informatie over de instructie.
SORTEER OP
Sorteert de resultaten.
Syntaxis:
ORDER BY <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ], ...
...
Voorbeeld:
MATCH (n:Person)
RETURN *
ORDER BY n.lastName ASC NULLS LAST, n.firstName ASC
Nullplaatsing is onafhankelijk van de sorteerrichting. De standaard is NULLS LAST voor zowel ASC als DESC; specificeren NULLS FIRST om nullwaarden vóór niet-nullwaarden te plaatsen.
Belangrijk
De gevraagde volgorde van rijen is alleen gegarandeerd direct na een voorgaande ORDER BY uitspraak.
Eventuele volgende instructies (indien aanwezig) zijn niet gegarandeerd om een dergelijke volgorde te behouden.
Zie de ORDER BY voor meer informatie over de instructie.
VERSCHUIVING/LIMIET
Rij overslaan en het aantal resultaten beperken.
Syntaxis:
OFFSET <offset> [ LIMIT <limit> ]
LIMIT <limit>
...
Voorbeeld:
MATCH (n:Person)
ORDER BY n.birthday
OFFSET 10 LIMIT 20
RETURN n.firstName || ' ' || n.lastName AS name, n.birthday
Zie de OFFSET voor meer informatie over de LIMIT en instructies.
RETURN
Voer de uiteindelijke resultaten uit.
Syntaxis:
RETURN [ DISTINCT ] <expression> [ AS <alias> ], ...
Voorbeeld:
MATCH (n:Person)
RETURN n.firstName, n.lastName
Zie de RETURN voor meer informatie over de instructie.
NEXT
Start een nieuwe queryfase. Alleen kolommen die door de voorgaande fase worden teruggegeven, zijn beschikbaar na NEXT.
Syntaxis:
<query stage>
RETURN <columns>
NEXT
<query stage>
Voorbeeld:
RETURN 1 AS value
NEXT
RETURN value + 1 AS nextValue
Beide fasen kunnen een unie van queryblokken bevatten. De vereniging wordt binnen die fase geëvalueerd voordat de output de NEXT grens overschrijdt.
Voor meer informatie over NEXT, zie de GQL-taalgids.
Voorwaardelijke uitspraken
Routeert elke invoerrij naar de eerste WHEN tak waarvan het predicaat evalueert naar TRUE.
Syntaxis:
WHEN <predicate> THEN <linear query statement or { query statements }>
[ WHEN <predicate> THEN <linear query statement or { query statements }> ... ]
[ ELSE <linear query statement or { query statements }> ]
Predicaten moeten Booleaan zijn en worden in volgorde geëvalueerd.
FALSE en UNKNOWN door te vallen naar de volgende tak. Als er geen tak overeenkomt en er geen ELSEis, wordt de invoerrij weggelaten. Predicaten na de eerste match en niet-geselecteerde taklichamen worden niet geëvalueerd.
RETURN 'Alice' AS name, 19900101u AS birthday
NEXT
WHEN birthday < 20000101u THEN
RETURN name, 'Before 2000' AS era
ELSE
RETURN name, '2000 or later' AS era
Alle vertakkingen moeten dezelfde kolomnamen teruggeven met compatibele datatypes. Omsluit een tak met beugels als deze een geneste procedure bevat.
Voor meer informatie, zie Conditionele statements.
UNION
Combineert de output van complete queryblokken.
Syntaxis:
<query block>
UNION [ DISTINCT | ALL ]
<query block>
Verwijder dubbele rijen en UNION DISTINCT kaal.UNION
UNION ALL bewaart dubbele rijen. Elk queryblok moet dezelfde set kolomnamen met compatibele datatypes teruggeven.
Voor meer informatie over vakbonden, zie de GQL-taalgids.
Grafiekpatronen
Grafiekpatronen beschrijven de structuur van de grafiek die overeenkomt.
Knooppuntpatronen
Gebruik in grafiekdatabases knooppunten om entiteiten weer te geven, zoals personen, producten of plaatsen.
Knooppuntpatronen beschrijven hoe knooppunten in de grafiek overeenkomen. U kunt filteren op label- of bindvariabelen.
(n) -- Any node
(n:Person) -- Node with Person label
(n:City&Place) -- Node with City AND Place label
(:Person) -- Person node, don't bind variable
Zie de grafiekpatronen voor meer informatie over knooppuntpatronen.
Randpatronen
Edge-patronen geven relaties tussen knooppunten op, inclusief richting en randtype. In grafiekdatabases vertegenwoordigt een rand een verbinding of relatie tussen twee knooppunten.
<-[e]- -- Incoming edge
-[e]-> -- Outgoing edge
-[e]- -- Any edge
-[e:knows]-> -- Edge with label ("relationship type")
-[e:knows|likes]-> -- Edges with different labels
-[:knows]-> -- :knows edge, don't bind variable
Zie de grafiekpatronen voor meer informatie over randpatronen.
Labelexpressies
Met labelexpressies kunt u knooppunten vergelijken met specifieke labelcombinaties met behulp van logische operators.
:Person&Company -- Both Person AND Company labels
:Person|Company -- Person OR Company labels
:!Company -- NOT Company label
:(Person|!Company)&Active -- Complex expressions with parentheses
Zie de grafiekpatronen voor meer informatie over labelexpressies.
Padpatronen
Padpatronen beschrijven doorkruisingen via de grafiek, inclusief hopaantallen en variabele bindingen.
(a)-[:knows|likes]->{1,3}(b) -- 1-3 hops via knows/likes
p=()-[:knows]->() -- Bind a path variable
MATCH REPEATABLE ELEMENTS (a)->(b) -- Explicit default match mode
MATCH DIFFERENT EDGES (a)->(b), (a)->(c)
MATCH ALL TRAIL (a)->{1,4}(b) -- Every edge-unique path
MATCH p = ANY SHORTEST (a)->{1,4}(b) -- One shortest path per endpoint pair
WALK is de standaard padmodus en staat herhaalde knopen en randen toe.
TRAIL voorkomt herhaalde randen.
SIMPLE voorkomt herhaalde knopen behalve bij een sluitende eerste-naar-laatste cyclus, en ACYCLIC voorkomt alle herhaalde knopen. Beide knooppunt-unieke modi voorkomen ook herhaalde randen omdat hergebruik van randen de eindknopen zou herhalen.
ALL is de standaard padzoekopdracht.
ANY SHORTEST geeft één kortste pad terug voor elk bron-bestemmingspaar en kiest niet deterministisch tussen gekoppelde paden.
Ondersteunde kwantoren zijn onder andere vaste {n}, begrensde {m,n} en {,n}, en onbegrensde {m,}, *, en +. Onbegrensde patronen ALL WALK worden niet ondersteund; gebruik een terminating path-modus. Onbegrensd ANY SHORTEST WALK heeft extra vorm- en padwaardebeperkingen. Voor details, zie GQL-grafiekpatronen.
Zie de grafiekpatronen voor meer informatie over padpatronen.
Meerdere patronen
Gebruik meerdere patronen om complexe, niet-lineaire grafiekstructuren in één query te vinden.
(a)->(b), (a)->(c) -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d) -- Nonlinear structures
Zie de grafiekpatronen voor meer informatie over meerdere patronen.
Waarden en waardetypen
Basistypen
Basistypen zijn primitieve gegevenswaarden, zoals tekenreeksen, getallen, Booleaanse waarden en datum/tijd.
STRING -- 'hello', "world"
INT64 -- 42, -17
FLOAT64 -- 3.14, -2.5e10, -17d
BOOL -- TRUE, FALSE, UNKNOWN
ZONED DATETIME -- ZONED_DATETIME('2023-01-15T10:30:00Z')
Het d of achtervoegsel D vormt een benaderende FLOAT64 letterlijke vorm. Een exponent zonder achtervoegsel creëert ook een FLOAT64 waarde. De en F letterlijke f achtervoegsels worden momenteel niet ondersteund.
Zie GQL-waarden en waardetypen voor meer informatie over basistypen.
Referentiewaardetypen
Referentiewaardetypen zijn knooppunten en randen die u als waarden in query's gebruikt.
NODE -- Node reference values
EDGE -- Edge reference values
Zie GQL-waarden en waardetypen voor meer informatie over referentiewaardetypen.
Verzamelingstypen
Verzamelingstypen groeperen meerdere waarden, zoals lijsten en paden.
LIST<INT64> -- [1, 2, 3]
LIST<STRING> -- ['a', 'b', 'c']
PATH -- Path values
Zie GQL-waarden en waardetypen voor meer informatie over verzamelingstypen.
Materiaal- en neutrale types
Elk waardetype is nullable (inclusief de null-waarde) of het materiaal (sluit het uit).
Typen zijn standaard null-baar, tenzij u expliciet opgeeft NOT NULL.
STRING NOT NULL -- Material (Non-nullable) string type
INT64 -- Nullable (default) integer type
Expressies en operators
Conditional
Eenvoudige CASE uitdrukkingen vergelijken één uitdrukking met één of meer waarden.
CASE expr WHEN val THEN val ELSE val END -- Simple CASE
NULLIF(a, b) -- NULL if a = b
Gezocht CASE WHEN <predicate> expressies worden niet ondersteund. Gebruik een conditionele instructie om rijen te routeren op basis van predicaten.
Zie de GQL-expressies en -functies voor meer informatie over voorwaardelijke expressies.
Comparison
Vergelijkingsoperatoren vergelijken waarden en controleren op gelijkheid, volgorde of null-waarden.
=, <>, <, <=, >, >= -- Standard comparison
IS NULL, IS NOT NULL -- Null checks
Zie de GQL-expressies en -functies voor meer informatie over vergelijkingspredicaten.
Logical
Logische operators combineren of negate booleaanse voorwaarden in query's.
AND, OR, NOT, XOR -- Boolean logic
Zie de GQL-expressies en -functies voor meer informatie over logische expressies.
EXISTS
Test of een procedure-vorm subquery ten minste één rij teruggeeft.
EXISTS {
MATCH (p)-[:knows]->(friend:Person)
RETURN friend
}
EXISTS geeft een niet-nul Booleaanse waarde terug. Gebruik NOT EXISTS om te testen of de subquery geen rijen teruggeeft. Je kunt het resultaat gebruiken in WHERE of FILTER, LET, RETURN, , ORDER BYen filter- of bronexpressies aggregeren.
EXISTS wordt niet ondersteund binnen een lijst predicaatfilter.
Belangrijk
Grafiekpatroon-only vormen zoals EXISTS { (p)-[:knows]->(friend) } en EXISTS ((p)-[:knows]->(friend)) worden niet ondersteund. Gebruik het procedureformulier dat MATCH in het voorgaande voorbeeld wordt getoond.
Caution
Een niet-gegroepeerd aggregaat zoals RETURN count(*) geeft één rij terug, zelfs als er geen patroon overeenkomt. Omdat EXISTS tests voor rijen die vorm evalueert tot TRUE.
Voor meer informatie over EXISTS, zie Existence subqueries.
Arithmetic
Rekenkundige operators voeren berekeningen uit op getallen.
+, -, *, / -- Basic arithmetic operations
1.00m / 8.00m -- Exact result: 0.1250m
Zie de GQL-expressies en -functies voor meer informatie over rekenkundige expressies.
Tekenreekspatronen
Tekenreekspatronen komen overeen met subtekenreeksen, voorvoegsels of achtervoegsels in tekenreeksen.
n.firstName CONTAINS 'John' -- Has substring
n.browserUsed STARTS WITH 'Chrome' -- Starts with prefix
n.locationIP ENDS WITH '.1' -- Ends with suffix
MSFT.REGEXP_LIKE(n.firstName, '^jo', 'i') -- RE2 regular expression
Zie de GQL-expressies en -functies voor meer informatie over tekenreekspatroonpredicaten.
Lijstbewerkingen
Testlidmaatschap van lijstbewerkingen, toegangselementen en lengte van metinglijst.
n.gender IN ['male', 'female'] -- Membership test
n.tags[0] -- First element
size(n.tags) -- List length
ALL(x IN n.tags WHERE x <> '') -- Every element matches
ANY(x IN n.tags WHERE x = 'gql') -- At least one element matches
NONE(x IN n.tags WHERE x = '') -- No element matches
SINGLE(x IN n.tags WHERE x = 'gql') -- Exactly one element matches
Lijstpredicaatfuncties geven , FALSE, of UNKNOWN terug TRUEvolgens de filterresultaten. Voor een lege lijst, ALL en NONE retourneren TRUE, terwijl ANY en SINGLE retourneren FALSE. Een nulbronlijst geeft .UNKNOWN
De elementbinding is lokaal aan het filter en kan een buitenste variabele schaduwen. Aggregaten over die lokale binding en EXISTS subqueries binnen het filter worden niet ondersteund.
Voor meer informatie, zie Lijst met predicaatfuncties.
Toegang tot eigenschappen
Met eigenschapstoegang wordt de waarde van een eigenschap opgehaald van een knooppunt of edge.
n.firstName -- Property access
Zie de GQL-expressies en -functies voor meer informatie over toegang tot eigenschappen.
Functions
Gebruik ingebouwde functies om waarden te transformeren, grafiekelementen te inspecteren en rijen te aggregeren.
Numerieke functies
Numerieke functies berekenen numerieke waarden of produceren gehele getallenbereiken.
abs(value) -- Absolute value; preserves the numeric type
power(base, exponent) -- Exponentiation; returns DOUBLE
sin(radians), cos(radians) -- Trigonometric functions
asin(value), acos(value) -- Inverse functions; value must be in [-1, 1]
degrees(radians) -- Convert radians to degrees
radians(degrees) -- Convert degrees to radians
range(start, end) -- Integer range with step 1
range(start, end, step) -- Integer range with a nonzero step
Andere ondersteunde trigonometrische functies zijn TAN, COT, , ATAN, SINH, COSH, en TANH. Behalve voor ABS en RANGE, geven deze numerieke functies .DOUBLE
Lees meer over numerieke functies in GQL-expressies en -functies.
Gecompileerde functies
Statistische functies berekenen samenvattingswaarden voor groepen rijen (verticale aggregatie) of over de elementen van een groepslijst (horizontale aggregatie).
count(*) -- Count all rows
count(expr) -- Count non-null values
sum(p.birthday) -- Sum values
avg(p.birthday) -- Average
min(p.birthday), max(p.birthday) -- Minimum and maximum values
collect_list(p.firstName) -- Collect inputs, including nulls
collect_one(p.firstName) -- Select one non-null value
collect_elements(p.roles) -- Concatenate list-valued inputs
count(DISTINCT expr) -- Remove duplicate expression values
count(*) FILTER (WHERE predicate LIMIT 10) -- Filter and limit this aggregate
Zonder kolommen te groeperen geeft een aggregaatquery zonder invoerrijen een lege lijst voor COLLECT_LIST en COLLECT_ELEMENTS, en nul voor SUM, AVG, MIN, MAX, en COLLECT_ONE.0COUNT Een groepslijstargument maakt het aggregaat horizontaal.
Meer informatie over statistische functies in de GQL-expressies en -functies.
Stringfuncties
Met tekenreeksfuncties kunt u tekenreekswaarden gebruiken en analyseren.
char_length(s) -- String length
upper(s), lower(s) -- Unicode case mapping
casefold(s) -- Unicode caseless form
normalize(s) -- Normalize a string to NFC
normalize(s, NFD) -- Normalize a string to NFD
trim(s) -- Trim spaces
trim(leading '_' from s) -- Trim one custom byte
string_join(list) -- Join with ", "
string_join(list, delimiter) -- Join with a custom delimiter
MSFT.REGEXP_COUNT(s, pattern) -- Count RE2 matches
MSFT.REGEXP_INSTR(s, pattern) -- Find a zero-based match position
MSFT.REGEXP_SUBSTR(s, pattern) -- Return matching text
MSFT.REGEXP_REPLACE(s, pattern, replacement) -- Replace matches
Regex-patronen, vervangingen en opties moeten letterlijk zijn. Voor handtekeningen, vlaggen en nullgedrag, zie Stringfuncties.
Lijstfuncties
Met lijstfuncties kunt u werken met lijsten, zoals het controleren van de lengte of het bijsnijden van de grootte.
size(list) -- List length
trim(list, n) -- Trim a list to at most n elements
Zie GQL-expressies en -functies voor meer informatie over lijstfuncties.
Functies voor grafieken
Met grafiekfuncties kunt u informatie ophalen uit knooppunten, paden en randen.
labels(node) -- Get node labels
element_id(node_or_edge) -- Get an opaque element identifier
nodes(path) -- Get path nodes
edges(path) -- Get path edges
elements(path) -- Get all path nodes and edges
path_length(path) -- Get number of edges in a path
Zie GQL-expressies en -functies voor meer informatie over grafiekfuncties.
Tijdelijke functies
Met tijdelijke functies kunt u werken met datum- en tijdwaarden.
CURRENT_TIMESTAMP -- Get the current zoned datetime
ZONED_DATETIME(string) -- Parse an ISO 8601 zoned datetime
DURATION(string) -- Parse an ISO 8601 day-time duration
Zie GQL-expressies en -functies voor meer informatie over tijdelijke functies.
Algemene functies
Met algemene functies kunt u op algemene manieren met gegevens werken.
coalesce(expr1, expr2, ...) -- Get the first non-null value
to_json_string(value) -- Convert value to JSON string
nullif(a, b) -- NULL if a = b, else a
Zie GQL-expressies en -functies voor meer informatie over algemene functies.
Taakgerichte voorbeelden
Gebruik de how-to artikelen wanneer je complete, klaar om aan te passen zoekpatronen nodig hebt:
- Schrijf gemeenschappelijke GQL-queries voor buren, multihop-traversal, gedeelde verbindingen en bestaanscontroles.
- Filter en aggregeer grafiekgegevens voor rij- en patroonfiltering, groepering, verzamelaggregaten en conditionele routing.
- Schrijf grafiekpatroonqueries voor padmodi, padzoekopdrachten, patrooncompositie en optionele matching.