GQL-lausekkeet, predikaatit ja funktiot

Tämä artikkeli sisältää kattavan viitteen Microsoft Fabric -kyselyiden kaaviossa käytettäviin GQL-lausekkeisiin, predikaatteja ja sisäisiin funktioihin. Tämän viittauksen avulla voit ymmärtää, miten voit suorittaa laskutoimituksia, suodattaa tuloksia ja muuntaa tietoja kaaviokyselyissäsi.

Yleiskatsaus GQL-kyselykielestä ja päästä päähän -kyselyesimerkeistä on artikkelissa GQL-kieliopas. Lisätietoja tuetuista tietotyypeistä ja literaalisyntaksista on artikkelissa GQL-arvot ja arvotyypit.

Literaalit

Literaalit ovat yksinkertaisia lausekkeita, jotka arvioivat suoraan ilmoitetun arvon. GQL-arvot ja arvotyypit -artikkelissa selitetään kunkin arvotyypin literaalit yksityiskohtaisesti.

Esimerkki:

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

Jokaisen tietotyypin yksityiskohtainen literaalisyntaksi on kohdassa GQL-arvot ja arvotyypit.

Predikaatit

Predikaatit ovat totuusarvolausekkeita, joita käytetään yleisesti GQL-kyselyiden tulosten suodattamiseen. Ne saavat arvon TRUE, FALSEtai UNKNOWN (tyhjäarvo).

Varoitus

Kun käytät predikaatteja suodattimena, ne säilyttävät vain ne kohteet, joiden predikaatti antaa tulokseksi TRUE.

Vertailupredikaatit

Vertaa arvoja seuraavien operaattoreiden avulla:

  • = (yhtä suuri)
  • <> (eri suuri kuin)
  • < (pienempi kuin)
  • > (suurempi kuin)
  • <= (pienempi tai yhtä suuri kuin)
  • >= (suurempi tai yhtä suuri kuin)

GQL käyttää kolmiarvoista logiikkaa, jossa vertailu tyhjäarvon kanssa palauttaa UNKNOWN:

Lauseke Tulos
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Jos haluat tarkan vertailukäyttäytymisen, tutustu kunkin arvotyypin dokumentaatioon GQL-arvoissa ja arvotyypeissä.

Esimerkki:

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

Jos molemmat operandit ovat lukuja, GQL vertaa niitä niiden numeeristen arvojen mukaan.

Important

Graafi ei vielä tue kaikkia GQL:n määrittelemiä numeerisia vertailuja. Nykyinen käyttäytyminen perustuu seuraaviin sääntöihin:

  • Kokonaisluvun ja likimääräisen luvun vertailu muuntaa kokonaisluvun likimääräiseksi numeeriseksi tyypiksi.
  • Allekirjoitettujen ja allekirjoittamattomien kokonaislukujen vertailu muuntaa molemmat arvot yleensä allekirjoitetuksi kokonaislukutyypiksi. Allekirjoittamaton arvo allekirjoitetun kokonaislukualueen ulkopuolella aiheuttaa virheen.

Loogiset lausekkeet

Yhdistä ehdot loogisiin operaattoreihin:

  • AND (molemmat ehdot toteutuvat)
  • OR (jompikumpi ehdoista on tosi)
  • NOT (negatiivisen ehdon)
  • XOR (eksklusiivinen erottaminen – tosi, kun täsmälleen yksi operandi on tosi)

Esimerkki:

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

Ominaisuuden olemassaolon predikaatit

Voit tarkistaa, onko ominaisuuksia olemassa, käyttämällä näitä predikaatteja:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Note

Yritys päästä käsiksi tunnettuun olemattomaan ominaisuuteen johtaa syntaksivirheeseen. Pääsy mahdollisesti olemattomaan kiinteistöön arvioidaan null. Ominaisuuden tunnettu ja mahdollisesti ei-olemassa olevan ominaisuuden määrittäminen perustuu käytettyjen solmujen tai reunan tyyppiin.

Olemassaolon alikyselyt

Käytä proseduurimuotoista EXISTS alikyselyä testataksesi, palauttaako sisäkkäinen kysely vähintään yhden rivin:

EXISTS {
  <query statements>
  RETURN <columns>
}

Tuloksena on ei-nolla Boolen arvo:

  • TRUE jos alikysely palauttaa yhden tai useamman rivin.
  • FALSE jos alikysely ei palauta rivejä.

Muuttujat, jotka ovat jo laajuudessa, ovat implisiittisesti saatavilla alikyselyssä. Muuttujat, jotka esitellään vain alikyselyn sisällä, eivät ole käytettävissä sen ulkopuolella.

Käyttö EXISTS suodattimessa:

MATCH (p:Person)
WHERE EXISTS {
  MATCH (p)-[:knows]->(friend:Person)
  RETURN friend
}
RETURN p.firstName, p.lastName

Käytetään NOT EXISTS rivien säilyttämiseen, joille alikysely ei palauta rivejä. Voit myös käyttää EXISTS , LETRETURN, ORDER BY, ja aggregoituja suodatin- tai lähdelausekkeita. EXISTS ei ole tuettu listan predikaattisuodattimessa.

Important

Pelkästään graafikuviomuotoja kuten EXISTS { (p)-[:knows]->(friend) } ja EXISTS ((p)-[:knows]->(friend)) ei tueta. Käytä edellä mainituissa esimerkeissä esitettyä menettelymuotoa. Skalaarikyselyt VALUE { ... } eivät ole tuettuja.

Varoitus

EXISTS Testaa, palauttaako alikysely rivin, ei onko kokonaisarvo nollasta poikkeava. Ryhmittelemätön aggregaatti, kuten , RETURN count(*) palauttaa yhden rivin, vaikka MATCH ei löytäisi rivejä, joten kyseinen muoto EXISTS arvioi .TRUE Palauta sovitettu muuttuja, kun haluat testata, onko osumia olemassa.

Lisätietoja korreloiduista alikyselyistä löytyy GQL-kielioppaan CALL lauseesta .

Jäsenyyksien luettelopredikaatit

Testaa, ovatko arvot luetteloissa:

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

Lista predikaattifunktiot

Käytä listapredikaattifunktiota arvioidaksesi Boolen lausekkeen listan alkioille:

ALL(element IN list WHERE predicate)
ANY(element IN list WHERE predicate)
NONE(element IN list WHERE predicate)
SINGLE(element IN list WHERE predicate)

Lähde voi olla listaliteraali, listaarvoinen ominaisuus, muuttuja tai ryhmälista muuttuvan pituisen kuvion perusteella.

Funktioilla on seuraavat merkitykset:

Function Merkitys
ALL Jokainen alkio täyttää predikaatin.
ANY Vähintään yksi alkio täyttää predikaatin.
NONE Mikään alkio ei tyydytä predikaattia.
SINGLE Täsmälleen yksi alkio täyttää predikaatin.

Seuraava esimerkki arvioi kaikki neljä funktiota dynaamisesti rakennetulla listalla:

LET items = [1, 2, 3]
RETURN ALL(x IN items WHERE x > 0) AS all_match,
       ANY(x IN items WHERE x = 2) AS any_match,
       NONE(x IN items WHERE x < 0) AS none_match,
       SINGLE(x IN items WHERE x = 2) AS single_match

Kaikki neljä palautettua arvoa ovat TRUE.

Voit myös arvioida listan alkioiden ominaisuuksia. Tässä esimerkissä connections ryhmälista, joka on luotu muuttuvan pituisen reunakuvion avulla:

MATCH (person:Person)-[connections:knows]->{1,4}(friend:Person)
WHERE ALL(connection IN connections WHERE connection.creationDate IS NOT NULL)
RETURN person.firstName, friend.firstName

Listapredikaatit käyttävät kolmiarvoista logiikkaa. Taulukko kuvaa tuloksen listan elementtien suodatinlausekkeen tuottamien arvojen avulla:

Function TRUE FALSE UNKNOWN Tyhjä lista
ALL Jokainen suodattimen tulos on TRUE. Vähintään yksi tulos on FALSE. Mikään tulos ei ole FALSE, ja ainakin yksi on UNKNOWN. TRUE
ANY Vähintään yksi suodatintulos on TRUE. Mikään tulos ei ole TRUE tai UNKNOWN. Mikään tulos ei ole TRUE, ja ainakin yksi on UNKNOWN. FALSE
NONE Mikään tulos ei ole TRUE tai UNKNOWN. Vähintään yksi tulos on TRUE. Mikään tulos ei ole TRUE, ja ainakin yksi on UNKNOWN. TRUE
SINGLE Täsmälleen yksi tulos on TRUE, eikä mikään ole UNKNOWN. Useampi kuin yksi tulos on TRUE, tai ei mikään tulos ole TRUE tai UNKNOWN. Korkeintaan yksi tulos on TRUE, ja ainakin yksi on UNKNOWN. FALSE

Jos lähdelista on nolla, jokainen funktio palauttaa UNKNOWN. Null-listan alkio tuottaa tuloksen, kun suodatin arvioidaan siten, että kyseinen alkio on sidottu nollaan; se ei automaattisesti tee funktion tulosta tuntemattomaksi.

Alkiomuuttuja on saatavilla vain listapredikaatin suodatinlausekkeessa. Suodatin voi myös viitata muuttujiin ympäröivästä kyselystä. Jos alkiomuuttujalla on sama nimi kuin ulkoisella muuttujalla, paikallinen alkiomuuttuja saa etusijan. Sisäkkäiset listan predikaatit voivat samalla tavalla varjostaa ulomman alkion muuttujaa.

Aggregaattifunktiot voivat viitata ympäröivään ryhmälistaan, mutta ne eivät voi aggregoida paikallisesti sidottu alkiomuuttuja. EXISTS Alikyselyt eivät myöskään ole tuettuja listapredikaattisuodattimessa.

ANY(...) on listapredikaattifunktio. Älä sekoita ANY SHORTEST sitä polkuhaun etuliitteeseen tai ANY dynaamiseen arvotyyppiin.

Merkkijonon mallipredikaatit

Täsmää merkkijonot käyttämällä kaavoja vastaavia tekniikoita:

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

RE2-säännöllisten lausekeiden sovituksessa käytä MSFT.REGEXP_LIKE.

Aritmeettiset lausekkeet

Käytä aritmeettisia vakio-operaattoreita numeeristen arvojen kanssa:

  • + (yhteenlasku)
  • - (vähennyslasku)
  • * (kertolasku)
  • / (jakolasku)

Aritmeettiset operaattorit noudattavat yleisiä matemaattisia käytäntöjä.

Etusija:

Yleensä operaattorit noudattavat vakiintuneita operaattoreiden käsittelyjärjestyssääntöjä, kuten * ennen +. Käytä sulkeita, jotta voit hallita arviointijärjestystä tarpeen mukaan.

Esimerkki:

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

Pakottamissäännöt:

Käytä käsittelyjärjestyksessä seuraavia sääntöjä:

  1. Aritmeettiset lausekkeet, jotka sisältävät likimääräisen numeerisen tyypin, palauttavat likimääräisen numeerisen tyypin.
  2. Aritmeettiset lausekkeet, jotka sisältävät sekä allekirjoitettuja että allekirjoittamattomia kokonaislukutyyppejä, palauttavat allekirjoitetun kokonaislukutyypin.

Ominaisuuden käyttö

Käytä ominaisuuksia pistemerkinnän avulla:

p.firstName
edge.creationDate

Luettelon käyttöoikeudet

Käytä luettelon elementtejä nollapohjaisella indeksoinnilla:

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

Sisäiset funktiot

GQL tukee erilaisia sisäisiä funktioita tietojenkäsittelyyn ja analysointiin.

Numeeriset funktiot

Käytä numeerisia funktioita muuntamaan numeerisia arvoja, laskemaan trigonometrisiä arvoja ja luomaan kokonaislukualueita.

Absoluuttinen arvo ja teho

Function Description
ABS(value) Palauttaa itseisarvon. Tuloksella on sama numeerinen tyyppi kuin value.
POWER(base, exponent) Nostaa base ja exponent palauttaa .DOUBLE

Molemmat funktiot hyväksyvät numeeriset arvot. Null-argumentti tuottaa nullin. Virheellinen numeerinen operaatio, kuten ylivuotava POWER tulos, aiheuttaa virheen.

RETURN ABS(-1) AS absoluteValue, POWER(2, -2) AS reciprocalSquare

Tulos on:

absoluteValue reciprocalSquare
1 0.25

Trigonometriset funktiot

Trigonometriset funktiot hyväksyvät yhden numeerisen arvon ja palauttavat .DOUBLE Null-argumentti tuottaa nullin.

Function Description
SIN(value), COS(value), TAN(value), COT(value) Laske trigonometrinen funktio. value on kulma radiaaneissa.
ASIN(value), ACOS(value), ATAN(value) Laske käänteistrigonometrinen funktio. Tuloksena on radiaaneja. ASIN ja ACOS vaativat arvon joukosta -1 läpi 1.
SINH(value), COSH(value), TANH(value) Laske hyperbolinen funktio.
DEGREES(value) Muuntaa kulman radiaaneista asteiksi.
RADIANS(value) Muuntaa kulman asteista radiaaneiksi.

Argumentti, joka on funktion matemaattisen määrittelyjoukon ulkopuolella, aiheuttaa virheen.

RETURN COS(0) AS cosine, RADIANS(180) AS angle

Tulos on:

kosini Kulma
1.0 3.141592653589793238462643383279502884

Kokonaislukualueet

RANGE(start, end)palauttaa kokonaislukulistan kohti startend, käyttäen askelta .1 RANGE(start, end, step) käyttää määriteltyä nollasta poikkeavaa vaihetta. start, end, ja step on oltava ei-nollakokonaislukuja. Nolla on pätevä tai startend; vain step , että sen täytyy olla ei-nolla.

Valikoima sisältää start. Se koskee end vain, kun tauluja end lisätään step toistuvasti tarkasti. Positiivinen askel, jolla start on suurempi kuin end, tai negatiivinen askel, jolla start on pienempi kuin end, palauttaa tyhjän listan. Nollavaihe aiheuttaa virheen.

RETURN RANGE(0, 10, 3) AS ascending, RANGE(5, 0, -2) AS descending

Tulos on:

nouseva laskeva
[0, 3, 6, 9] [5, 3, 1]

Jos kaikki argumentit ovat allekirjoittamattomia kokonaislukuja, RANGE palautetaan .LIST<UINT64> Muussa tapauksessa se palauttaa a LIST<INT64> :n ja hylkää arvot, joita ei voi turvallisesti esittää allekirjoitettuina kokonaislukuina.

Koostefunktiot

Aggregaattifunktiot yhdistävät arvoja joko syöterivien yli tai ryhmälistan sisällä, jota rajoittaa muuttuvanpituinen kuvio.

Function Description
COUNT(*) Laskee syöterivit, mukaan lukien rivit, joissa on nollaarvoja.
COUNT(expression) Laskee ei-nollatulokset .expression
SUM(expression) Palauttaa summan ei-nollalukujen numeerisista arvoista.
AVG(expression) Palauttaa ei-nollaarvojen numeeristen arvojen keskiarvon.
MIN(expression) Palauttaa minimiarvon, joka ei ole nolla.
MAX(expression) Palauttaa maksimiarvon, joka ei ole nolla.
COLLECT_LIST(expression) Palauttaa listan, jossa on yksi alkio jokaiselle syötteelle, mukaan lukien nollaalkiot.
COLLECT_ONE(expression) Palauttaa yhden ei-nollasyötteen arvon. Valittu arvo ei ole deterministinen.
COLLECT_ELEMENTS(expression) Yhdistää listaarvoisten syötteiden alkiot yhdeksi listaksi. Null-syötelistat eivät lisää alkioita, mutta listan nollaalkiot jäävät tulokseen.

Kun aggregaattikyselyllä ei ole ryhmittelysarakkeita eikä syöterivejä, COUNT palautetaan 0, COLLECT_LIST ja COLLECT_ELEMENTS tyhjä lista, ja muut aggregaattifunktiot palauttavat nullin. Älä luota kokoelman aggregaatin palauttamien arvojen järjestykseen. Ryhmittelisissä sarakkeissa mikään syöterivi ei tuota ryhmää eikä siten tulosriviä.

Joukonkvanttorit

Käytä ALL päällekkäisarvojen lisäämiseen tai DISTINCT niiden poistamiseen. ALL on oletusarvo lausekkeiden aggregaattien käytössä. COUNT(*) ei hyväksy tiettyä kvantifioijaa.

MATCH (person:Person)
RETURN COUNT(person) AS personCount,
       COUNT(DISTINCT person.browserUsed) AS browserCount

Jos COLLECT_LIST, DISTINCT poistaa päällekkäiset arvot ja säilyttää korkeintaan yhden nollan. Jos COLLECT_ELEMENTS, DISTINCT koskee alkioita syötelistojen yhdistämisen jälkeen. DISTINCT ei tee COLLECT_ONE determinististä.

Aggregaattikohtaiset suodattimet ja rajat

Lisää FILTER (WHERE predicate) yhteenvedon jälkeen vain arvot, jotka predicate ovat tosi. Väärät ja tuntemattomat predikaattitulokset jätetään pois. Tämä suodatin vaikuttaa vain kyseiseen aggregaattiin, ei syöteriveihin, jotka ovat käytettävissä muille lausekkeille samassa RETURN.

Lisää LIMIT n se aggregaattisuodattimen sisälle, jotta voidaan ottaa huomioon enintään n kelvolliset syöterivit. Suodatus tapahtuu ennen aggregaattikohtaista rajaa ja DISTINCT sitä sovelletaan rajan jälkeen.

MATCH (person:Person)
RETURN COUNT(*) AS allPeople,
       COUNT(*) FILTER (WHERE person.birthday < 19900101 LIMIT 5) AS sampleBornBefore1990

Rivien aggregointi

Aggregaatti yhdistää yleensä arvot pystysuunnassa syöterivien yli. Lasketaan GROUP BY yksi tulos jokaiselle ryhmälle.

MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.id AS cityId, c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY cityId, c.name

Älä sijoita yhtä pystysuoraa aggregaattia suoraan toisen sisälle samaan kyselylohkoon. Esimerkiksi on SUM(COUNT(*)) virheellinen. Käytä NEXT aggregointivaiheiden erottamiseen, kun sinun täytyy aggregata kokonaistulos.

Aggregaatio sovitetun polun sisällä

Reunamuuttuja, jota rajoittaa muuttujapituuskuvio, muuttuu ryhmälistaksi. Aggregaatti tämän muuttujan yli on vaakasuora: se laskee yhden tuloksen listasta jokaiselle vastatulle polulle, sen sijaan että yhdistäisi eri syöterivejä.

MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN COUNT(knows) AS pathLength

Tässä palautetaan COUNT(knows) kunkin sovitetun polun kaarien lukumäärä. Vaakasuorat muodot , COUNTSUM, AVG, MAXCOLLECT_ONEMINCOLLECT_LISTja COLLECT_ELEMENTS ovat tuettuja. COUNT(*) ja aggregaattikohtaisia FILTER tai LIMIT ei ole vaakasuoria muotoja.

Vaaka-aggregaatti voi olla syöte yhdelle ulommalle pystysuoralle aggregaatille:

MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN MIN(COUNT(knows)) AS shortestMatchedPath

Tässä kyselyssä COUNT(knows) lasketaan yksi pituus per sovitettu polku ja MIN yhdistetään nämä pituudet syöttörivien yli.

Tehtäväkeskeisiä esimerkkejä varten katso Suodata ja aggregoitu graafidata.

Ehdolliset lausekkeet

Käytä yksinkertaista CASE lauseketta verrataksesi yhtä lauseketta yhdellä tai useammalla arvolla ja palauta tulos, joka liittyy ensimmäiseen yhtä arvoon:

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

NULLIF:

NULLIF(a, b) palauttaa NULL arvon , jos a on byhtä suuri kuin , ja palauttaa muussa tapauksessa arvon a.

Esimerkki:

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

Haetut CASE WHEN <predicate> ilmaisut eivät ole tuettuja. Reitittääksesi rivit predikaattien mukaan ja suorittaaksesi valitulle haaralle kyselylauseen tai sisäkkäisen proseduurin, käytä WHEN ehdollista lausetta.

Merkkijono-funktiot

Käytä merkkijonofunktioita merkkijonojen mittaamiseen, muuntamiseen, etsimiseen, vertailuun ja yhdistämiseen.

Merkin pituus ja sijamuoto

Käytä näitä funktioita merkkijonojen mittaamiseen tai muuttamiseen:

Function Description
CHAR_LENGTH(string) Palauttaa merkkien määrän.
UPPER(string) Soveltaa Unicode-isojen kirjainten kartoitusta.
LOWER(string) Soveltaa Unicode-pienaakkosäätystä.
CASEFOLD(string) Soveltaa paikallisesta riippumatonta Unicode-kotelon taittamista sijaittomaan vastaavuuteen.

Unicode-kuvaukset voivat muuttaa merkkijonon pituutta tai esitystapaa:

RETURN UPPER('straße') AS uppercase,
       LOWER('İ') AS lowercase,
       CASEFOLD('Straße') AS folded

Tulokset ovat STRASSE, i̇, ja strasse, vastaavasti. CASEFOLD ei ole yhtä kuin LOWER. Esimerkiksi tapaustaitto ß vastaa ja ss kuvaa kreikkalaiset sigma-muodot Σ, σ, ja ς .σ

Normalisoi merkkijonot

GQL määrittelee neljä Unicode-normalisointimuotoa:

  • Normalisointimuoto C (NFC), kanoninen kompositio.
  • Normalisointimuoto D (NFD), kanoninen hajotelma.
  • Normalisointilomake KC (NFKC), yhteensopivuuskoostumus.
  • Normalisointilomake KD (NFKD), yhteensopivuushajotelma.

NORMALIZE(string) oletuksena NFC. Määritetään normalisointimuoto toiseksi argumentiksi:

RETURN NORMALIZE('cafe\u0301') AS composed,
       NORMALIZE('café', NFD) AS decomposed

Argumentin täytyy olla jono.

Important

Graph tukee tällä hetkellä NFC:tä ja NFD:tä. NFKC:n tai NFKD:n määrittäminen aiheuttaa virheen.

Leikkauskielet

Käytä TRIM välilyöntimerkin tai yhden tietyn merkin poistamiseen molemmista päistä, merkkijonon alusta tai lopusta:

RETURN TRIM('  text  ') AS both_ends,
       TRIM(BOTH FROM '  text  ') AS explicit_both,
       TRIM(LEADING FROM '  text  ') AS beginning,
       TRIM(TRAILING FROM '  text  ') AS ending,
       TRIM(LEADING 'f' FROM 'foobar') AS custom_character

Räätälöidyn leikkausarvon tulee olla täsmälleen yksi tavu. Monitavuiset Unicode-merkit ja merkkijonot, joissa on useita merkkejä, eivät ole tuettuja mukautettuina trimmausarvoina. Null-lähdekoodi tai mukautettu trimmausarvo palauttaa nullin.

Join stringit

STRING_JOIN(list [, delimiter]) liittyy jousien listaan. Oletuserotin on pilkku, jota seuraa välilyönti:

RETURN STRING_JOIN(['foo', 'bar', 'baz']) AS default_delimiter,
       STRING_JOIN(['foo', 'bar', 'baz'], '-') AS custom_delimiter

Tulokset ovat foo, bar, baz ja foo-bar-baz. Tyhjä lista palauttaa tyhjän merkkijonon. Null-lista, nolla-erottaja tai null-lista-elementti palauttaa nullin. Jokainen ei-nollalista-alkio on oltava merkkijono.

Säännöllisen lausekkeen funktiot

Graph tarjoaa nämä säännöllisen lausekkeen funktiot GQL:n laajennuksina:

Function Käyttäminen
MSFT.REGEXP_LIKE Testaa, sisältääkö teksti osuman.
MSFT.REGEXP_COUNT Laske tulitikkuja.
MSFT.REGEXP_INSTR Etsi ottelu- tai vangiryhmän sijainti.
MSFT.REGEXP_SUBSTR Palauta ottelun tai kaatamisryhmän teksti.
MSFT.REGEXP_REPLACE Korvaa vastaava teksti.
MSFT.REGEXP_LIKE

Palautuu TRUE , kun kuvio vastaa lähdemerkkijonon jotakin osaa. Jos osumia ei löydy, se palautuu FALSE.

Argumentit Syntaksi
2 MSFT.REGEXP_LIKE(source, pattern)
3 MSFT.REGEXP_LIKE(source, pattern, flags)

source on haettava merkkijono. pattern yhdistetään mihin tahansa alijonoon, source ellei lauseke itsessään käytä ankkureita kuten ^ tai $. flags muuttaa yhteensopivuuskäyttäytymistä, kuten on kuvattu kohdassa Matching rules and options.

RETURN MSFT.REGEXP_LIKE('HELLO', 'hello', 'i') AS matches

Tulos on TRUE.

MSFT.REGEXP_COUNT

Palauttaa otteluiden määrän. Jos osumia ei löydy, se palautuu 0.

Argumentit Syntaksi
2 MSFT.REGEXP_COUNT(source, pattern)
3 MSFT.REGEXP_COUNT(source, pattern, start)
4 MSFT.REGEXP_COUNT(source, pattern, start, flags)

source on haettava merkkijono, ja pattern tunnistaa laskettavat osumat. start on nollapohjainen Unicode-koodipisteen sijainti, josta sovitus voi alkaa. Ottelun on aloitettava tästä asemasta tai sen jälkeen. Asema ei muutu kielen uudeksi aluksi ankkuroiduille kuvioille. flags muuttaa yhteensopivuuskäyttäytymistä, kuten on kuvattu kohdassa Matching rules and options.

RETURN MSFT.REGEXP_COUNT('1a2a3a4', '[0-9]', 3) AS match_count

Haku alkaa sijainnista 3, toisena a, joten lasketaan vain numerot 3 ja 4 . Tulos on 2.

MSFT.REGEXP_INSTR

Palauttaa valitun match- tai capture-ryhmän nollaan perustuvan sijainnin.

Argumentit Syntaksi
2 MSFT.REGEXP_INSTR(source, pattern)
3 MSFT.REGEXP_INSTR(source, pattern, start)
4 MSFT.REGEXP_INSTR(source, pattern, start, occurrence)
5 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option)
6 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option, flags)
7 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option, flags, group)

source on merkkijono, jota haetaan, ja pattern tunnistaa osumat. start on nollapohjainen Unicode-koodipisteen sijainti, josta sovitus voi alkaa. Ottelun täytyy alkaa tästä asennosta tai sen jälkeen, mikä ei muutu ankkuroitujen kuvioiden kielen uudeksi alkuksi.

occurrence valitsee ensimmäisen, toisen tai seuraavan ei-päällekkäisen osuman, joka löytyy joukosta start. group Valitsee, mitä sijoittaa kyseisessä osumasta: 0 valitsee täydellisen osuman ja positiivinen arvo valitsee kyseisen numeroidun vangitsijaryhmän. return_option Määrittää, mikä raja valitusta ottelusta tai ryhmästä palautetaan: 0 palauttaa sen aloituspaikka ja 1 heti sen päättymisen jälkeisen paikan. flags muuttaa yhteensopivuuskäyttäytymistä, kuten on kuvattu kohdassa Matching rules and options.

Jos vastaavaa esiintymää ei löydetä tai valittu kaappausryhmä ei osallistu kyseiseen tapahtumaan, funktio palauttaa -1.

RETURN MSFT.REGEXP_INSTR('banana', 'a', 0, 2) AS match_position

Toinen ottelu alkaa sijainnista 3, joten tulos on 3.

MSFT.REGEXP_SUBSTR

Palauttaa tekstin valitusta ottelusta tai kaappausryhmästä.

Argumentit Syntaksi
2 MSFT.REGEXP_SUBSTR(source, pattern)
3 MSFT.REGEXP_SUBSTR(source, pattern, start)
4 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence)
5 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence, flags)
6 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence, flags, group)

source on merkkijono, jota haetaan, ja pattern tunnistaa osumat. start on nollapohjainen Unicode-koodipisteen sijainti, josta sovitus voi alkaa. Ottelun täytyy alkaa tästä asennosta tai sen jälkeen, mikä ei muutu ankkuroitujen kuvioiden kielen uudeksi alkuksi.

occurrence valitsee ensimmäisen, toisen tai seuraavan ei-päällekkäisen osuman, joka löytyy joukosta start. group valitsee tekstin palautettavaksi kyseisestä osumasta: 0 valitsee täydellisen osuman ja positiivinen arvo valitsee kyseisen numeroidun kaappausryhmän. flags muuttaa yhteensopivuuskäyttäytymistä, kuten on kuvattu kohdassa Matching rules and options.

Jos vastaavaa esiintymää ei löydy tai valittu kaappausryhmä ei osallistu kyseiseen tapahtumaan, funktio palauttaa nollan.

RETURN MSFT.REGEXP_SUBSTR(
  '12-345',
  '([0-9]+)-([0-9]+)',
  0,
  1,
  '',
  2
) AS matched_text

Ensimmäinen esiintymä on täydellinen merkkijono, ja kaappausryhmä 2 on 345, joten tulos on 345.

MSFT.REGEXP_REPLACE

Korvaa vastaavan tekstin. Oletuksena se korvaa jokaisen osuman ja lisää korvaavan tekstin kirjaimellisesti.

Argumentit Syntaksi
3 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement)
4 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start)
5 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start, occurrence)
6 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start, occurrence, flags)

source on merkkijono, jota muokataan, ja pattern tunnistaa osumat. replacement on valittua osumaa varten lisätty teksti. EXACT lisää sen kirjaimellisesti; TEMPLATE tulkitsee kaappausviittauksia.

start on nollapohjainen Unicode-koodipisteen sijainti, josta korvaaminen voi alkaa. Ottelun on aloitettava tästä asemasta tai sen jälkeen. Teksti ennen start säilyy muuttumattomana, eikä paikka muutu ankkuroitujen kuvioiden uuden alun kielelle. Aseta occurrence tilalle 0 korvaamaan kaikki osumat , starttai positiiviseksi arvoksi korvaamaan vain se numeroitu ei-päällekkäinen osuma. Aiemmat ottelut sen start jälkeen pysyvät muuttumattomina, kun tietty tapahtuma valitaan. flags muuttaa yhteensopivuuskäyttäytymistä, kuten on kuvattu kohdassa Matching rules and options.

RETURN MSFT.REGEXP_REPLACE('a1b2c3', '[0-9]', '#', 0, 2) AS replaced

Vain toisen numeron osuma korvataan, joten tulos on a1b#c3.

Jos osumusta ei löydy, lähdemerkkijono palautetaan muuttumattomana.

Käyttääksesi sovitettua tekstiä korvaavassa muodossa, määritä TEMPLATE. Tässä tilassa \0\9 viitataan täydellisiin match- ja capture-ryhmiin, \\ ja siihen lisätään kirjaimellinen takaviivo. Käytä raakamerkkijonoa, jonka etuliite on , @välittääksesi nämä viittaukset ilman lisäpakenemista:

RETURN MSFT.REGEXP_REPLACE(
  'John Smith',
  @'([A-Za-z]+) ([A-Za-z]+)',
  TEMPLATE @'\2 \1'
) AS reordered_name

Tulos on Smith John.

Yhteensopivuussäännöt ja vaihtoehdot

Kuviot käyttävät RE2-säännöllistä lauseketta ja vastaavat Unicode-merkkijonoja. Lähde voi olla mikä tahansa merkkijonolauseke. Kuvion, liput ja korvaaminen on oltava merkkijonoliteraaleja, ja numeeriset vaihtoehdot on oltava allekirjoittamattomia kokonaislukuliteraaleja.

Osumat löytyvät vasemmalta oikealle ilman päällekkäisyyttä. Nollapituisen vastaavuuden jälkeen sovitus etenee yhdellä Unicode-koodipisteellä.

Lähtöpaikat ja palautetut paikat ovat nollapohjaisia Unicode-koodipisteen offsetteja. Esiintymisluvut ovat yksipohjaisia, paitsi että esiintymä 0 tarkoittaa kaikkien esiintymien korvaamista .MSFT.REGEXP_REPLACE

Seuraavassa taulukossa on lueteltu oletusarvot pois jätetyille valinnaisille argumenteille:

Function Defaults
MSFT.REGEXP_LIKE Liput ovat tyhjiä.
MSFT.REGEXP_COUNT Aloitus on 0; liput ovat tyhjiä.
MSFT.REGEXP_INSTR Start on 0; esiintyminen on 1; return-vaihtoehto on 0; liput ovat tyhjiä; ryhmä on 0.
MSFT.REGEXP_SUBSTR Aloitus on 0; esiintyminen on 1; liput ovat tyhjiä; ryhmä on 0.
MSFT.REGEXP_REPLACE Tila on EXACT; start on 0; esiintyminen on 0; liput ovat tyhjiä.

Valinnaiset liput ovat:

Merkitse Toimintatapa
i Sovita ilman tapausta.
m Tee ^ ja $ sovita jokaisen rivin alku ja loppu.
s Sovita . uudet hahmot.

Yhdistä liput yhdeksi jonoksi, kuten 'ims'. Nollalähde palauttaa nollan. Tueton lippu, virheellinen säännöllinen lauseke, virheellinen palautusvaihtoehto tai virheellinen esiintymä tai ryhmänumero palauttaa virheen.

Kaavion funktiot

  • nodes(path) – palauttaa solmut polkuarvosta.
  • edges(path) – palauttaa reunat polkuarvosta.
  • elements(path) – palauttaa kaikki solmut ja reunat polusta yhtenä luettelona polkujärjestyksessä.
  • labels(node_or_edge) - palauttaa solmun tai reunan selitteet merkkijonoluettelona.
  • path_length(path) – palauttaa polun reunojen määrän.
  • element_id(node_or_edge) - palauttaa solmu- tai reunatunnisteen läpinäkymättömänä merkkijonona.

ELEMENT_ID hyväksyy solmu- tai reunaviitteen ja palauttaa nullin nollasyötteelle. Käsittele palautettua lankaa läpinäkymättömänä.

Esimerkki:

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

Luettelotoiminnot

  • size(list) – palauttaa luetteloarvon koon.
  • trim(list,n) - Trimmaa listan korkeintaan n alkuaineisiin.

Esimerkki:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
LET personId = p.id, personName = p.firstName
RETURN personId, personName, collect_list(t.name) AS interests
GROUP BY personId, personName
FILTER size(interests) > 3

Ajalliset funktiot

  • CURRENT_TIMESTAMP - palauttaa nykyisen vyöhykkeellä olevan päivämäärän ja ajan.
  • ZONED_DATETIME(string) - palauttaa vyöhykkeellä varustetun päivämääräajan, joka on esitetty ISO 8601 -merkkijonolla.
  • DURATION(string) - palauttaa ISO 8601 -kestojonon esittämän päiväaika-ajan.

Esimerkki:

RETURN CURRENT_TIMESTAMP AS now,
       DURATION('PT2H') AS twoHours

Käytä vähennysoperaattoria laskeaksesi keston kahden vyöhykkeisen päivämäärän välillä:

RETURN ZONED_DATETIME('2026-09-17T12:00:00Z')
       - ZONED_DATETIME('2026-09-17T10:00:00Z') AS elapsed

Important

Kaavio tukee päiväkestoja, mutta ei vuosi-kuukausikestoja. DURATION_BETWEEN(start, end) ei ole tällä hetkellä tuettu; vähennä kaksi vyöhykkeistä datetime-arvoa sen sijaan.

Yleiset funktiot

  • coalesce(value1, value2, ...) – palauttaa ensimmäisen muun kuin tyhjäarvon.
  • to_json_string(value) - muuntaa arvon JSON-merkkijonoesitykseksi.

Esimerkki:

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