Výrazy, predikáty a funkcie GQL

Tento článok poskytuje komplexný odkaz na výrazy GQL, predikáty a vstavané funkcie dostupné v dotazoch služby Microsoft Fabric v grafe. Pomocou tohto odkazu môžete porozumieť tomu, ako vykonávať výpočty, filtrovať výsledky a transformovať údaje v grafových dotazoch.

Prehľad jazyka dotazu GQL a príkladov komplexných dotazov nájdete v téme Sprievodca jazykom GQL. Informácie o podporovaných typoch údajov a literálovej syntaxi nájdete v téme Hodnoty a typy hodnôt GQL.

Explicitné hodnoty premenných

Literáky sú jednoduché výrazy, ktoré sa priamo vyhodnotia na danej hodnote. V článku Hodnoty a typy hodnôt jazyka GQL sa podrobnosti vysvetľujú literálmi každého druhu hodnoty.

Príklad:

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Podrobnú literálovú syntax pre každý typ údajov nájdete v téme Hodnoty gql a typy hodnôt.

Predikáty

Predikáty sú booleovské výrazy, ktoré sa bežne používajú na filtrovanie výsledkov v dotazoch GQL. Vyhodnotia sa na TRUE, FALSEalebo UNKNOWN (null).

Upozornenie

Keď použijete predikáty ako filter, zachovajú sa iba tie položky, pre ktoré sa predikát vyhodnotí ako TRUE.

Predikáty porovnania

Na porovnanie hodnôt použite tieto operátory:

  • = (rovná sa)
  • <> (nerovná sa)
  • < (menšie ako)
  • > (väčšie ako)
  • <= (menšie ako alebo rovná sa)
  • >= (väčšie alebo rovné)

GQL používa logiku s tromi hodnotami, kde porovnania s vrátenou UNKNOWNhodnotou null:

Expression Výsledok
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Konkrétne správanie pri porovnávaní nájdete v dokumentácii pre každý typ hodnoty v hodnotách a typoch hodnôt GQL.

Príklad:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Pravidlá pre vynútenie čísel:

Podľa priority použite nasledujúce pravidlá:

  1. Výrazy porovnania, ktoré obsahujú argumenty približných číselných typov, vynútia, aby všetky argumenty boli približného číselného typu.
  2. Výrazy porovnania, ktoré zahŕňajú argumenty oboch typov celých aj znamiarovaných celých čísel, nútia všetky argumenty, aby boli celočíselného typu so znamiteľom.

Logické výrazy

Kombinovanie podmienok s logickými operátormi:

  • AND (obidve podmienky sú pravdivé)
  • OR (obe podmienky majú hodnotu true)
  • NOT (neguje podmienku)
  • XOR (exkluzívna disjunkcia - pravda, keď presne jeden operand je pravdivá)

Príklad:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Existencia vlastností predikáty

Ak chcete skontrolovať, či existujú vlastnosti, použite tieto predikáty:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Poznámka

Pokus o prístup k známej neexistujúcej vlastnosti vedie k chybe v syntaxi. Prístup k potenciálne neexistujúcej vlastnosti sa hodnotí na null. Určenie, či je vlastnosť známa alebo potenciálne nie je existujúca, závisí od typu prístupného uzla alebo okraja.

Zoznam predikátov členstva

Testovanie, či sú hodnoty v zoznamoch:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

Predikáty vzoru reťazca

Priradiť reťazce pomocou techník zhody vzorov:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

Aritmetické výrazy

S číselnými hodnotami použite štandardné aritmetické operátory:

  • + (sčítanie)
  • - (odčítanie)
  • * (násobenie)
  • / (delenie)

Aritmetické operátory sa riadia všeobecnými matematickými konvenciami.

Priorita:

Vo všeobecnosti operátory dodržiavaujú zavedené pravidlá poradia operátorov podľa priority, napríklad * predtým +. Pomocou zátvoriek môžete podľa potreby kontrolovať poradie vyhodnocovania.

Príklad:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Pravidlá nátlaku:

Podľa priority použite nasledujúce pravidlá:

  1. Aritmetické výrazy zahŕňajúce argumenty približných typov čísiel vrátia výsledok približného číselného typu.
  2. Aritmetické výrazy zahŕňajúce argumenty oboch typov celých čísel so znamietmi aj bez zátvoriek vrátia výsledok celočíselného typu so znamiteľom.

Príklad:

LET birth_year = p.birthday / 10000
RETURN birth_year

Prístup k vlastnostiach

Prístup k vlastnostiam pomocou zápisu bodky:

p.firstName
edge.creationDate

Prístup k zoznamu

Prístup k prvkom zoznamu pomocou indexovania založeného na nule:

interests[0]    -- first element
interests[1]    -- second element

Vstavané funkcie

Jazyk GQL podporuje rôzne vstavané funkcie na spracovanie a analýzu údajov.

Agregačné funkcie

Pomocou agregačných funkcií môžete vyhodnotiť výraz na základe množiny riadkov a získať konečnú hodnotu výsledku skombinovaním hodnôt vypočítaných pre každý riadok. Graph podporuje nasledujúce agregačné funkcie:

  • count(*) – spočíta riadky
  • sum(expression) – sčíta číselné hodnoty
  • avg(expression) – priemery číselných hodnôt
  • min(expression) – nájde minimálnu hodnotu
  • max(expression) – nájde maximálnu hodnotu
  • collect_list(expression) – zhromažďuje hodnoty do zoznamu

Vo všeobecnosti agregačné funkcie ignorujú hodnoty null a vždy vracajú hodnotu null, keď nie sú zadané žiadne vstupné hodnoty materiálu. Pomocou tejto možnosti môžete coalesce získať inú predvolenú hodnotu: coalesce(sum(expr), 0). Jedinou výnimkou je agregatá count funkcia, ktorá vždy počíta zadané hodnoty bez hodnoty null a vráti hodnotu 0, ak nie sú žiadne. Používa count(*) sa na zahrnutie hodnôt null do počtu.

Agregačné funkcie môžete používať tromi rôznymi spôsobmi:

  • Výpočet (zvislých) agregátov na celých tabuľkách
  • Výpočet (zvislých) agregátov na podtabuľkách určených kľúčom zoskupenia
  • Výpočet (vodorovných) agregátov prostredníctvom prvkov zoznamu skupín

Zvislé agregáty:

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

Vodorovné agregáty:

Vodorovná agregácia vypočíta agregácie medzi prvkami premenných zoznamu skupín zo vzorov s premenlivou dĺžkou:

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

Vodorovná agregácia má vždy prednosť pred zvislou agregáciou. Ak chcete skonvertovať zoznam skupín na bežný zoznam, použite funkciu collect_list(edges).

Poznámka

Komplexné pokrytie techník agregácie vrátane väzby na okraj s premenlivou dĺžkou a kombinovania vodorovnej/zvislej agregácie nájdete v časti Pokročilé techniky agregácie.

Podmienené výrazy

Pomocou podmienených výrazov môžete na základe podmienok vrátiť rôzne hodnoty.

Prehľadávané PRÍPAD:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Jednoduchá case ( CASE):

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

NULLIF:

NULLIF(a, b) Vráti hodnotu NULL , ak a sa rovná bhodnote , v opačnom prípade vráti hodnotu a.

Príklad:

MATCH (p:Person)
RETURN p.firstName,
       CASE
         WHEN p.gender = 'male' THEN 'M'
         WHEN p.gender = 'female' THEN 'F'
         ELSE 'Other'
       END AS gender_code,
       NULLIF(p.browserUsed, 'Unknown') AS browser

Reťazcové funkcie

  • char_length(string) – vráti dĺžku reťazca.
  • upper(string)– vráti variant zadaného reťazca (iba US ASCII).
  • lower(string)– vráti variant zadaného reťazca malými písmenami (iba US ASCII).
  • trim(string) – odstráni úvodný aj koncový prázdny znak.
  • string_join(list, separator) – spojí prvky zoznamu s oddeľovačom.

Príklad:

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

Funkcie grafu

  • nodes(path) – vráti uzly z hodnoty cesty.
  • edges(path) – vráti okraje z hodnoty cesty.
  • elements(path) – vráti všetky uzly a okraje z cesty ako jeden zoznam v poradí ciest.
  • labels(node_or_edge) – vráti označenia uzla alebo okraja ako zoznam reťazcov.
  • path_length(path) – vráti počet okrajov v ceste.

Príklad:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops

Funkcie zoznamu

  • size(list) – vráti veľkosť hodnoty zoznamu.
  • trim(list,n) – orezať zoznam tak, aby mal najväčšiu veľkosť n.

Príklad:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

Časové funkcie

  • zoned_datetime() – vráti aktuálny dátum a čas v pásme.
  • zoned_datetime("2025-09-12T10:10:52Z") – vráti hodnotu datetime pre pásmo zadaná argumentom vo formáte ISO 8601.

Príklad:

RETURN zoned_datetime() AS now

Všeobecné funkcie

  • coalesce(value1, value2, ...) – vráti prvú hodnotu bez hodnoty null.
  • to_json_string(value) – konvertuje hodnotu na vyjadrenie reťazca JSON.

Príklad:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
       to_json_string(p) AS person_json