Microsoft Fabric -kaavion GQL-kieliopas

GQL (Graph Query Language) on kaaviotietokantojen ISO-standardoitu kyselykieli. GQL:n avulla voit tehdä kyselyjä, analysoida ja käsitellä kaaviotietoja tehokkaasti Microsoft Fabricin kaavion avulla.

Sama ISO-työryhmä, joka standardoi SQL:ää, kehittää GQL:ää. Tämän seurauksena GQL jakaa SQL:n kanssa useita käsitteitä, kuten lausekkeita, predikaatteja ja tietotyyppejä. Jos sinulla on SQL-kokemusta, voit käyttää paljon näistä tiedoista GQL:ssä.

Tämä artikkeli on GQL:n kokonaisopas graafissa. Se selittää, miten kieli sopii yhteen ja linkittää kohdennettuihin viittauksiin täydellisten syntaksin ja tyyppitietojen saamiseksi. Se kattaa:

  • Ydinkäsitteet: Kaaviotietorakenteet, mallit ja kyselyn perusteet
  • Olennaiset väitteet: MATCH, FILTER, LET, WHENORDER BYLIMIT, jaRETURN
  • Tietotyypit ja lausekkeet: Arvotyypit, operaattorit ja sisäiset funktiot
  • Kehittyneet tekniikat: monilausekekooste, muuttujan kokoaminen ja koostamisstrategiat

Note

Virallinen kansainvälinen standardi GQL:lle on ISO/IEC 39075 Information Technology - Database Languages - GQL.

Jos etsit tehtäväkeskeistä ohjausta kielen ohjeiden sijaan, katso ohjeet:

Käytä kohdennettuja viiteartikkeleita, kun tarvitset täydellisiä tietoja:

Tarvittavat tiedot Lopullinen artikkeli
Syntaksi yhdellä silmäyksellä GQL:n pikaviite
Solmu-, reuna-, polku- ja kuvioiden yhdistämisen syntaksi GQL-graafikuviot
Operaattorit, predikaatit ja funktiot GQL-lausekkeet, predikaatit ja funktiot
Kirjaimellinen syntaksi, arvokäyttäytyminen ja tyyppimuunnokset GQL-arvot ja arvotyypit
Graafityyppimääritelmät ja rajoitteet GQL-kaaviotyypit
Nykyinen ISO GQL -ominaisuuskattavuus GQL-standardin noudattaminen
Nykyiset Fabric-kohtaiset rajoitukset ja rajoitukset Nykyiset rajoitukset

Ennakkovaatimukset

Ennen kuin aloitat, varmista, että olet tutustunut seuraaviin käsitteisiin:

  • Basic tietokantojen ymmärtäminen – Käyttökokemus mistä tahansa tietokantajärjestelmästä, kuten relaatiojärjestelmästä (SQL), NoSQL tai kaaviosta, on hyötyä.
  • Kaaviokäsitteet : ymmärrät solmuja, reunoja ja suhteita yhdistetyissä tiedoissa.
  • Kyselyn perusteet : opit peruskyselyn käsitteet, kuten suodatuksen, lajittelun ja koostamisen.

Suositeltu tausta:

  • SQL- tai openCypher-kielten käyttö helpottaa GQL-syntaksin opettelua (ne ovat GQL:n juuria).
  • Tietojen mallinnuksen tunteminen auttaa kaaviorakenteen suunnittelussa.
  • Ymmärrät kaaviotietojen tietyn käyttötapauksen.

Mitä tarvitset:

  • Pääsy kaaviotyötilaan, jossa on kyselytoimintoja.
  • Esimerkkejä tiedoista tai halukkuudesta työskennellä yhteisöpalvelukokemuksilla.
  • Perustekstieditori kyselyiden kirjoittamiseen.

Vihje

Jos kaaviotietokannat ovat sinulle uusia, aloita kaaviotietomallien yleiskatsauksesta ennen tämän oppaan jatkamista.

Mikä tekee GQL: stä erityisen

GQL on suunniteltu erityisesti graafidatalle, joten sen syntaksi ilmaisee suoraan, miten entiteetit ovat yhteydessä toisiinsa. Siinä missä SQL yleensä ilmaisee suhteita taulujen liitoksilla, GQL käyttää graafikuvioita, jotka muistuttavat datan kaavioita.

Esimerkiksi seuraava kysely löytää pareja, jotka tuntevat toisensa ja ovat syntyneet ennen vuotta 1999:

MATCH (person:Person)-[:knows]-(friend:Person)
WHERE person.birthday < 19990101
  AND friend.birthday < 19990101
RETURN person.firstName || ' ' || person.lastName AS person_name,
       friend.firstName || ' ' || friend.lastName AS friend_name

Kuvio (person:Person)-[:knows]-(friend:Person) näyttää suhteen rakenteen, joka vastaa sitä. Muuttujat sitovat nämä kaksi henkilöä, jotta kysely voi suodattaa ja palauttaa heidän ominaisuutensa.

GQL:n perusteet

Nämä käsitteet muodostavat GQL:n perustan:

  • Graafit sisältävät solmuja ja särmiä, joilla on tunnisteita ja ominaisuuksia.
  • Graafityypit määrittelevät muodollisesti solmutyypit, reunatyypit ja rajoitteet, jotka ovat sallittuja graafissa.
  • Kyselyt käyttävät lauseita kuten MATCH, FILTER, ja RETURN datan käsittelyyn ja tulosten tuottamiseen.
  • Kuviot kuvaavat graafirakenteita, jotka sopivat yhteen.
  • Lausekkeet laskevat, muuntavat ja vertailevat arvoja.
  • Predikaatit ovat Boolen lausekkeita, joita käytetään ehtojen testaamiseen.
  • Arvotyypit määrittävät, millaisia arvoja kyselyt voivat käsitellä ja graafien ominaisuudet tallentaa.

Ymmärrä graafidataa

GQL:n kanssa työskennelläksesi sinun täytyy ymmärtää kielikyselyn merkitty ominaisuusgraafirakenne.

Solmut ja reunat: peruselementit

Merkitty ominaisuusgraafi sisältää kahta tyyppiä graafielementtejä:

  • Solmut edustavat tyypillisesti entiteettejä, kuten ihmisiä, organisaatioita, julkaisuja tai tuotteita.
  • Reunat edustavat solmujen välisiä yhteyksiä, kuten henkilöä, joka tuntee toisen henkilön tai työskentelee yrityksessä.

Jokaisella graafielementillä on sisäinen identiteetti, yksi tai useampi tunniste ja joukko ominaisuuksia. Etiketit luokittelevat alkioita, kuten Person tai knows. Ominaisuudet ovat nimi-arvo-pareja, kuten firstName: 'Alice' tai birthday: 19730108u. Graafissa kaarella on aina täsmälleen yksi tunniste.

Jokainen reuna yhdistää täsmälleen kaksi solmua: origon ja kohteen. Reunan suunta on osa graafirakennetta. Esimerkiksi reuna workAt voi yhdistää origon Person kohteeseen Company .

Note

Graph ei tällä hetkellä tue suuntautumattomien reunojen luomista. Voit hakea olemassa olevaa suunnattua reunaa kumpaankin suuntaan käyttämällä mitä tahansa suuntautuvaa reunakuviota, kuten -[:knows]-.

Graafit ovat hyvin muotoiltuja: jokainen reuna yhdistää kaksi solmua, jotka ovat samassa graafissa.

Kaaviomallit ja kaaviotyypit

Fabric-graafimalli määrittelee solmutyypit, reunatyypit, ominaisuudet, lähdekuvaukset ja avaimet, jotka ovat saatavilla graafissa. Se määrittelee, mitkä lähdetaulukon rivit muuttuvat solmuiksi ja kaariksi ja miten nämä elementit yhdistyvät. Mallinnusohjeita varten katso Suunnittele graafiskeema.

GQL-standardi käyttää graafityyppiä kuvaamaan virallisesti sallittuja solmutyyppejä, reunatyyppejä, ominaisuuksia ja rajoitteita. Graafityypit ovat kielitason vastine Fabric-graafimallin edustamalle rakenteelle, mutta Graph ei tällä hetkellä hyväksy GQL-graafityyppisiä ilmoituksia suoraan. Muodollista syntaksia ja käsitteitä varten katso GQL-graafityypit.

Tässä oppaassa käytetty esimerkkikaavio

Esimerkkeinä käytetään sosiaalisen verkoston otosaineistoa, joka sisältää ihmisiä, paikkoja, organisaatioita, viestejä, tageja ja niitä yhdistäviä reunoja.

Näytekaavio yhdistää nämä alueet:

  • Ihmiset tuntevat toisiaan, työskentelevät yrityksissä ja opiskelevat yliopistoissa.
  • Kaupungit, maat tai alueet ja mantereet muodostavat maantieteellisen hierarkian.
  • Foorumeilla on julkaisuja, ja ihmiset luovat viestejä ja kommentteja.
  • Tagit luokittelevat sisällön ja edustavat ihmisten kiinnostuksen kohteita.

Kaavio, joka näyttää yhteisöpalveluverkoston rakenteen.

Täydellisen esimerkkirakenteen löydät sosiaalisen verkoston skeeman esimerkistä. Yleisistä graafikäsitteistä katso Merkityt ominaisuusgraafit.

Ensimmäiset GQL-kyselysi

Nyt kun ymmärrät kaavion perusteet, tutustutaan siihen, miten kaavion tiedoista tehdään kyselyjä GQL:n avulla. Nämä esimerkit rakentuvat yksinkertaisesta monimutkaiseen ja näyttävät, miten GQL:n lähestymistapa tekee kaaviokyselyistä intuitiivisia ja tehokkaita.

Aloita yksinkertaisesti: etsi kaikki henkilöt

Aloita yksinkertaisimmalla mahdollisella kyselyllä. Etsi kaavion kaikkien ihmisten:Person nimet (etunimi, sukunimi).

MATCH (p:Person)
RETURN p.firstName, p.lastName

Tämä kysely toimii seuraavasti:

  1. MATCH etsii kaikki solmut, jotka on merkitty Person.
  2. RETURN näyttää etu- ja sukunimet.

Lisää suodatus: etsi tietyt henkilöt

Etsi nyt ihmisiä, joilla on tiettyjä ominaisuuksia. Etsi tässä tapauksessa kaikki nimeltä Alice ja näytä heidän nimensä ja syntymäpäivänsä.

MATCH (p:Person)
FILTER p.firstName = 'Alice'
RETURN p.firstName, p.lastName, p.birthday

Tämä kysely toimii seuraavasti:

  1. MATCH etsii kaikki person-merkinnällä merkityt solmut (p).
  2. FILTER solmut (p), joiden etunimi on Alice.
  3. RETURN näyttää niiden etunimen, sukunimen ja syntymäpäivän.

Peruskyselyrakenne

GQL-peruskyselyt noudattavat yhdenmukaista mallia: lausekkeita, jotka toimivat yhdessä tietojen löytämiseksi, suodattamiseksi ja palauttamiseksi. Useimmat kyselyt alkavat kuvioiden MATCH löytämisestä graafista ja päättyvät tuloksen RETURN määrittämiseen.

Tässä on yksinkertainen kysely, joka löytää pareja, jotka tuntevat toisensa ja joilla on sama syntymäpäivä, ja palauttaa sitten näiden ystäväparien kokonaismäärän.

MATCH (n:Person)-[:knows]-(m:Person)
FILTER n.birthday = m.birthday
RETURN count(*) AS same_age_friends

Tämä kysely toimii seuraavasti:

  1. MATCH löytää kaikki solmuparit Person , jotka tuntevat toisensa.
  2. FILTER säilyttää vain parit, joissa molemmilla ihmisillä on samat syntymäpäivät.
  3. RETURN laskee, kuinka monta tällaista kaveriparia on olemassa.

Vihje

Voit myös suodattaa suoraan kuvion mukaan lisäämällä lausekkeen WHERE . Esimerkiksi yhdistää MATCH (n:Person WHERE n.birthday < 19900101) vain Person solmut, joiden birthday arvo on ennen vuotta 1990.

GQL tukee C-tyylisiä // rivikommentteja, SQL-tyylisiä -- rivikommentteja ja C-tyylisiä /* */ lohkokommentteja.

Yleisiä väitteitä

  • MATCH: Tunnistaa etsittävän graafikuvion—tässä määritellään kiinnostamasi datan rakenne.
  • LET: Määrittää uudet muuttujat tai lasketut arvot sovitetun datan perusteella—lisää tulokseen johdetut sarakkeet.
  • FOR: Laajentaa listan riveihin, joissa on valinnainen nollapohjainen siirtymä tai yksipohjainen ordinaalipaikka.
  • CALL: Suorittaa inline-alikyselyn jokaiselle syöteriville ja lisää alikyselyn palauttamat sarakkeet.
  • FILTER: Kaventaa tuloksia käyttämällä ehtoja—poistaa rivit, jotka eivät täytä kriteerejä.
  • ORDER BY: Lajittelee suodatetun datan – auttaa järjestämään tuloksen yhden tai useamman kentän perusteella.
  • OFFSET ja LIMIT: Rajoita palautettujen rivien määrää—hyödyllistä sivuttamiseen tai yläk-kyselyihin.
  • RETURN: Määrittelee lopullisen tuloksen—määrittelee, mitä dataa tulee sisällyttää tulosjoukkoon ja suorittaa aggregointia.
  • NEXT: Käynnistää toisen kyselyvaiheen käyttämällä edellisestä vaiheesta palautettuja sarakkeita.

Miten lausekkeet toimivat yhdessä

GQL-lauseet muodostavat putkilinjan, jossa jokainen lause käsittelee edellisen lauseen tuloksen. Tämä peräkkäinen suoritus tekee kyselyistä helppoja lukea ja debugata, koska suoritusjärjestys vastaa lukujärjestystä.

Avainkohdat:

  • Lauseet suoritetaan tehokkaasti peräkkäin.
  • Jokainen lause muuntaa dataa ja välittää sen seuraavalle.
  • Tämä prosessi luo selkeän, ennustettavan tietovuon, joka yksinkertaistaa monimutkaisia kyselyitä.
  • NEXT aloittaa uuden kyselyvaiheen. Seuraavassa vaiheessa on käytettävissä vain edellisen lauseen projissoimat RETURN sarakkeet.
  • UNION, UNION DISTINCT, ja UNION ALL yhdistävät täydellisten kyselylohkojen tulokset.

Note

Väittämillä on määritelty looginen järjestys. Kirjoita kyselyt tämän datavirran mukaan sen sijaan, että luottaisit tiettyyn fyysiseen suoritusstrategiaan.

Esimerkki lausekkeen koostumuksesta

Seuraava GQL-kysely löytää ensimmäiset 10 työntekijää yrityksissä, joiden nimessä on "Air", lajitellaan heidät koko nimen mukaan ja palauttaa heidän koko nimensä sekä yrityksen nimen.

-- Data flows: Match → Let → Filter → Order → Limit → Return
MATCH (p:Person)-[:workAt]->(c:Company)           -- Input: unit table, Output: (p, c) table
LET fullName = p.firstName || ' ' || p.lastName   -- Input: (p, c) table, Output: (p, c, fullName) table
FILTER c.name CONTAINS 'Air'                      -- Input: (p, c, fullName) table, Output: filtered table
ORDER BY fullName                                 -- Input: filtered table, Output: sorted table
LIMIT 10                                          -- Input: sorted table, Output: top 10 rows table
RETURN fullName, c.name AS companyName            -- Input: top 10 rows table
                                                  -- Output: projected (fullName, companyName) result table

Tämä kysely toimii seuraavasti:

  1. MATCH Löytää ihmisiä, jotka työskentelevät yrityksissä.
  2. LET luo täydet nimet yhdistämällä etu- ja sukunimet.
  3. FILTER pitää vain työntekijöitä, joiden nimessä on "Air".
  4. ORDER BY lajittelee koko nimen mukaan.
  5. LIMIT saa ensimmäiset 10 tulosta.
  6. RETURN palauttaa koko nimet ja yrityksen nimet.

Muuttujat yhdistävät tietosi

Muuttujat, kuten p, cja fullName edellisissä esimerkeissä sisältävät tietoja lausekkeiden välillä. Kun käytät muuttujan nimeä uudelleen, GQL varmistaa automaattisesti, että se viittaa samoihin tietoihin, mikä luo tehokkaat liitosehdot. Muuttujia kutsutaan myös sidontamuuttujiksi.

Voit luokitella muuttujia eri tavoilla:

Sitomalla lähdettä:

  • Kuviomuuttujat – sidottu vastaavilla kaaviokuvioilla
  • Tavalliset muuttujat – sidotut muut kielen rakenteet

Mallimuuttujatyypit:

  • Elementtimuuttujat – sido kaavioelementin viitearvoihin
    • Solmumuuttujat – sido yksittäisiin solmuihin
    • Reunamuuttujat – sido yksittäisiin reunoja
  • Polkumuuttujat – sido vastaavia polkuja edustaviin polkuarvoihin

Viiteasteen mukaan:

  • Singleton-muuttujat – sido yksittäisen elementin viitearvoihin malleista
  • Ryhmämuuttujat – sitoudu muuttujapituisten mallien elementtiviitearvojen listoihin. Lisätietoja löytyy kohdasta Aggregaatiofunktiot.

Suorituksen tulokset ja tulokset

Kun suoritat kyselyn, saat takaisin suoritustuloksen , joka koostuu seuraavista:

  • Tulos on yleensä tulostaulukko, jossa on tiedot lausunnostasi RETURN .
  • Tilatiedot , jotka osoittavat, onnistuiko kysely vai ei.

Tulostaulukot

Tulostaulukko , jos sellainen on, on kyselyn suorittamisen todellinen tulos.

Tulostaulukko sisältää tietoja sen sarakkeiden nimestä ja tyypistä, ensisijaisen sarakkeen nimijärjestyksen, jota käytetään tulosten näyttämiseen, onko taulukko järjestetty, ja itse todelliset rivit.

Note

Jos suoritus epäonnistuu, suoritustulokseen ei sisälly tulostaulukkoa.

Jätetty pois tulokset

GQL määrittelee myös pois jääneen tuloksen lauseille, jotka eivät koskaan tuota rivejä, riippumatta datasta tai arviointituloksesta. Pois jääneellä tuloksella on onnistuneen suorituksen tilakoodi 00001.

Pois jätetty tulos eroaa tyhjästä tulostaulukosta. Tyhjä taulukko tarkoittaa, että rivin tuottaja kysely arvioitiin, mutta ei tuottanut rivejä. Kyselyrajapinta voi esittää poisjääneen tuloksen, jonka tulostyyppi NOTHINGon .

Graph säästää pois jätetyt tulokset tulevan datamäärittelykielen (DDL) ja tietomanipulaatiokielen (DML) lauseen tukemiseen. Nykyiset kyselylauseet tuottavat taulukon tuloksia, mukaan lukien tyhjät taulukot.

Tilatiedot

Kyselyn suorittamisen aikana prosessi tunnistaa erilaisia huomionarvoisia ehtoja, kuten virheitä tai varoituksia. Kukin ehto tallennetaan tilaobjektin mukaan suorituksen tuloksen tilatietoihin.

Tilatiedot koostuvat ensisijaisesta tilaobjektista ja (mahdollisesti tyhjästä) muiden tilaobjektien luettelosta. Ensisijainen tilaobjekti on aina olemassa ja ilmaisee, onnistuiko vai epäonnistuiko kyselyn suorittaminen.

Jokainen tilaobjekti sisältää viiden merkin aakkosnumeerisen koodin ja kuvauksen tallennetusta ehdosta.

Kyselyrajapinta käyttää seuraavia ensisijaisia tilakoodeja:

API-tilakoodi Merkitys
00000 Onnistunut suoritus vähintään yhdellä rivillä.
00001 Onnistunut lopputulos pois jääneellä tuloksella. Varattu tulevaa DDL- ja DML-tukea varten.
01000 Varoitus- tai informaatioehto.
02000 Riviä tuottavasta kyselystä ei tällä hetkellä ole saatavilla.
42000 Käyttäjän korjattava kyselyvirhe.
50000 Järjestelmä- tai luokittelematon virhe.

API säilyttää kyselymoottorin raportoiman kanonisen GQLSTATUKSEN diagnostiikkatietueen _graphaneGqlStatus jäsenessä. Esimerkiksi numeerinen ylivuoto käyttää kanonista GQLSTATUSia 22003, kun taas nollalla jakaminen käyttää 22012; molemmat esitetään 42000 julkisella status.code kentällä.

Tärkeää

Sovelluskoodissa käytetään status.code laajaa onnistumista ja virheiden käsittelyä. Käytä kanonista GQLSTATUS-diagnostiikkaa, kun sinun täytyy erottaa tietty kyselytilanne. Älä testaa kuvaustekstiä, koska se voi vaihdella.

Lisäksi tilaobjektit voivat sisältää pohjana olevan syyn tilaobjektin ja diagnostiikkatietueen sekä lisätietoja, jotka luonnehtivat tallennettua ehtoa.

Keskeiset käsitteet ja lausekkeet

Tässä osiossa käsitellään tärkeimpiä rakenneosia, joita tarvitaan tehokkaiden GQL-kyselyiden kirjoittamiseen. Jokainen konsepti rakentuu kyselyjen kirjoittamistaitoihin.

Kaaviokuviot: löydä rakenne

Graafikuvio kuvaa solmut, reunat ja polut, jotka vastaavat. Sido muuttujat, kun myöhemmät lauseet tarvitsevat viitata yhteensopiviin alkioihin:

MATCH (person:Person)-[employment:workAt]->(company:Company)
RETURN person.firstName, company.name, employment.workFrom

Aseta predikaatti riviin, kun se määrittelee, mikä solmu tai reuna voi osallistua kuvioon:

MATCH (person:Person WHERE person.firstName = 'Alice')
      -[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName

Käytä muuttujaa uudelleen vaatimaan kaksi kuviopaikkaa saman elementin sitomiseen. Erota kuviot pilkuilla suurempien graafirakenteiden muodostamiseksi. Käytä kvanttoria, kuten {1,4} toistaaksesi reunakuvion ja sovittaaksesi muuttuvan pituisia polkuja.

Polkutilojen ohjauselementin uudelleenkäyttö polun sisällä:

Polkutila Toimintatapa
WALK Sallii toistuvat solmut ja reunat. Tämä tila on oletus.
TRAIL Estää toistuvat reunat.
SIMPLE Estää toistuvat solmut paitsi jaetun ensimmäisen ja viimeisen solmun.
ACYCLIC Estää kaikki toistuvat solmut.

Polun hakuetuliite määrää, mitkä vastaavat polut palautetaan. ALL on oletus. ANY SHORTEST palauttaa yhden lyhimmän polun jokaiselle lähde-kohdeparille:

MATCH path = ANY SHORTEST
  (source:Person WHERE source.id = 123u)-[:knows]->{1,4}(target:Person)
RETURN target.id, path_length(path) AS hopCount

Inline-predikaatit rajoittavat polun kelpoisuutta ennen polun valintaa. Statement-tason MATCH ... WHERE ja myöhemmät FILTER operaatiot ovat postfilterejä. Tämä ero voi muuttaa ANY SHORTEST tuloksia.

Määritteleviä solmuja, särmiä, polkuja, kompositioita, kvanttoreita ja predikaattisijoittelusemantiikkaa varten katso GQL-graafikuviot. Nykyiset reittirajoitukset katso Nykyiset rajoitukset.

Ydinlausekkeet

GQL tarjoaa tiettyjä lauseketyyppejä, jotka toimivat yhdessä kaavion tietojen käsittelemiseksi vaiheittain. Näiden lausekkeiden ymmärtäminen on välttämätöntä tehokkaiden kyselyiden luomisen kannalta.

MATCH lausunto

Syntaksi:

MATCH <graph pattern>, <graph pattern>, ... [ WHERE <predicate> ]

- MATCH lauseke ottaa syötetiedot ja etsii kaaviomalleja. Se liittää syötemuuttujat mallimuuttujien kanssa ja tuottaa kaikki vastaavat yhdistelmät.

Syöte- ja tulostemuuttujat:

-- Input: unit table (no columns, one row)
-- Pattern variables: p, c  
-- Output: table with (p, c) columns for each person-company match
MATCH (p:Person)-[:workAt]->(c:Company)

Lauseketason suodatus käyttämällä WHERE-funktiota:

-- Filter pattern matches
MATCH (p:Person)-[:workAt]->(c:Company) WHERE p.lastName = c.name

Voit suodattaa jälkeen kaikki vastaavuudet käyttämällä .-suodatinta WHERE. Näin vältetään erillinen FILTER lauseke. Polun haun etuliitteellä, kuten ANY SHORTEST, lause-taso WHERE pätee polun valinnan jälkeen. Inline-predikaatit sen sijaan rajoittavat, mitkä polut ovat valintakelpoisia. Lisätietoja löytyy kohdasta Paikkapredikaatit ennen tai jälkeen polun valinnan.

Liittäminen syötemuuttujien avulla:

Kun MATCH ei ole ensimmäinen lauseke, se liittää syötetiedot, joissa on mallivastaavuuksia:

...
-- Input: table with 'targetCompany' column
-- Implicit join: targetCompany (equality join)
-- Output: table with (targetCompany, p, r) columns
MATCH (p:Person)-[r:workAt]->(targetCompany)

Tärkeää

Graafi tukee perus- ja täydellistä lineaarista lauseen koostamista, mukaan lukien NEXT. Voit myös yhdistää kyselylohkot , UNIONUNION DISTINCT, ja UNION ALL. , EXCEPTINTERSECT, ja OTHERWISE set-operaatioita ei vielä tueta. Katso lisätietoja nykyisistä rajoituksista olevasta artikkelista.

Tärkeimmät yhdistämisen toiminnot:

Tietojen MATCH yhdistämisen käsitteleminen:

  • Muuttujien yhtäläisyys: Syötemuuttujat liittyvät mallimuuttujiin käyttämällä yhtäläisyysvastaavuutta
  • Sisäliitos: Syöterivit, joilla ei ole kuviovastaavuuksia, hylätään. Käytä OPTIONAL MATCH -toiminnossa vasemmanpuoleisen ulkoliitoksen toimintaa varten.
  • Suodatusjärjestys: Lausetasoiset WHERE suodattimet kuvion sovituksen ja polun valinnan valmistuttua
  • Kuvion koostumus: Jaetut muuttujat rajoittavat kuviot samaan elementtiin. Irralliset kuviot muodostavat karteesisen tulon.

Tärkeää

Erillinen kuvio on pätevä, mutta sen karteesinen tulo voi muodostaa monia rivejä. Käytä jaettuja muuttujia, kun kuvioiden tulisi viitata samoihin graafin elementteihin.

Yhdistä mallit, joissa on jaetut muuttujat:

-- Shared variable 'p' joins the two patterns
-- Output: people with both workplace and residence data
MATCH (p:Person)-[:workAt]->(c:Company), 
      (p)-[:isLocatedIn]->(city:City)

OPTIONAL MATCH lausunto

Syntaksi:

OPTIONAL MATCH <graph pattern> [ WHERE <predicate> ]

OPTIONAL MATCH toimii samalla tavalla kuin MATCH vasen ulkoliitos -semantiikka. Jos malli ei löydä vastaavuutta syöteriville, kysely säilyttää yhteensopimattomien muuttujien arvot sisältävän rivin NULL sen sijaan, että se hyläisiin.

Esimerkki:

-- Find all people and, if available, their workplace
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company_name

Ihmiset, jotka eivät työskentele missään yrityksessä, näkyvät edelleen tuloksissa NULL kohteelle company_name.

Vihje

Käytä tätä OPTIONAL MATCH , kun haluat sisällyttää entiteettejä, joilla ei ehkä ole tiettyä suhdetta(esimerkiksi SQL LEFT JOIN).

LET lausunto

Syntaksi:

LET <variable> = <expression>, <variable> = <expression>, ...

- LET lauseke luo laskettuja muuttujia ja mahdollistaa tietojen muunnoksen kyselyputkessa.

Perusmuuttujien luominen:

MATCH (p:Person)
LET fullName = p.firstName || ' ' || p.lastName
RETURN *
LIMIT 1000

Monimutkaiset laskutoimitukset:

MATCH (p:Person)
LET adjustedAge = 2000 - (p.birthday / 10000),
    fullProfile = p.firstName || ' ' || p.lastName || ' (' || p.gender || ')'
RETURN *
LIMIT 1000

Avaintoiminnot:

  • Kyselymoduuli arvioi lausekkeet jokaiselle syöteriville.
  • Tuloksista tulee uusia sarakkeita tulostaulukkoon.
  • Muuttujat voivat viitata vain aiemmista lausekkeista olemassa oleviin muuttujiin.
  • Useat tehtävät yhdessä LET lauseessa käyttävät samaa syötealuetta, joten tehtävä ei voi viitata toiseen tehtävään kyseisestä lauseesta.

FOR lausunto

Syntaksi:

FOR <variable> IN <list_expression>
  [ WITH OFFSET <offset_variable> | WITH ORDINALITY <ordinality_variable> ]

Lause FOR laajentaa listan riveihin. Jokaiselle syöteriville se lähettää yhden lähtörivin jokaiselle lista-alkiolle ja sitoo kyseisen elementin määritettyyn muuttujaan. Muita muuttujia syöteriviltä on edelleen saatavilla.

Käytä WITH OFFSET sitomaan nollapohjaista indeksiä tai WITH ORDINALITY käytä sitomaan yhteen perustuvaan sijaintiin.

LET cities = ['Seattle', 'London', 'Tokyo']
FOR city IN cities WITH ORDINALITY position
RETURN city, position

Tämä kysely palauttaa yhden rivin jokaiselle kaupungille. Arvot position ovat 1, 2, ja 3. Jos korvaat WITH ORDINALITY position , WITH OFFSET positionarvot ovat 0, 1, ja 2.

Lähdelausekkeen on arvioitava listaksi. Ei-lista-arvo aiheuttaa kyselyn epäonnistumisen.

CALL lausunto

Käytä CALL inline-alikyselyn ajamiseen jokaiselle syöteriville:

CALL {
  <query statements>
  RETURN <columns>
}

Muuttujat, jotka ovat jo laajuudessa, ovat implisiittisesti saatavilla alikyselyssä. Alikyselyn sisällä luoduista muuttujista vain sen lopullisesta RETURN lauseesta peräisin olevat sarakkeet tulevat saataville sen ulkopuolella. Alikyselyssä luodut muuttujat, joita ei palauteta, pysyvät paikallisina.

Seuraava korreloitu alikysely laskee työnantajamäärän jokaiselle henkilölle:

MATCH (p:Person)
CALL {
  MATCH (p)-[:workAt]->(company:Company)
  RETURN count(*) AS employerCount
}
RETURN p.firstName, p.lastName, employerCount
ORDER BY employerCount DESC

Tavallinen CALL toimii kuin riippuvainen sisäinen liitos. Se tuottaa yhden lähtörivin jokaista alikyselyn palauttamaa riviä kohden. Jos alikysely ei palauta rivejä, vastaavaa ulkoriviä ei palauteta. Jos se palauttaa useita rivejä, ulkorivi ilmestyy kerran jokaiselle alikyselyriville.

Edellinen count(*) esimerkki palauttaa aina yhden alikyselyrivin, koska se käyttää ryhmittelemätöntä aggregaattia. Henkilöllä, jolla ei ole vastaavaa työnantajaa, on siis arvo employerCount .0

Käytä OPTIONAL CALL riippuvaisena vasemman liitoksena. Kun alikysely ei palauta rivejä, se säilyttää yhden ulomman rivin ja asettaa palautetut alakyselysarakkeet arvoon NULL. Kun alikysely palauttaa useita rivejä, se tuottaa yhden lähtörivin jokaiselle alikyselyriville.

MATCH (p:Person)
OPTIONAL CALL {
  MATCH (p)-[:workAt]->(company:Company)
  RETURN company.name AS companyName
}
RETURN p.firstName, p.lastName, companyName

Voit sisäkyttää inline-subqueryjä CALL . Sisäkkäinen alikysely voi viitata muuttujiin sen ympäröivistä kyselyalueista.

Tärkeää

Päätä jokainen inline-runko CALL .RETURN Graafi ei tue nimettyjä proseduurikutsuja tai eksplisiittisiä muuttujien tuontilistoja, kuten CALL (p) { ... }.

FILTER lausunto

Syntaksi:

FILTER [ WHERE ] <predicate>

- FILTER lauseke antaa tarkan hallinnan siihen, mitkä tiedot etenevät kyselyputken läpi.

Perussuodatus:

MATCH (p:Person)
FILTER p.birthday < 19980101 AND p.gender = 'female'
RETURN *

Monimutkaiset loogiset ehdot:

MATCH (p:Person)
FILTER (p.gender = 'male' AND p.birthday < 19940101) 
  OR (p.gender = 'female' AND p.birthday < 19990101)
  OR p.browserUsed = 'Edge'
RETURN *

Tyhjäarvoa huomioon ottavat suodatusmallit:

Näiden mallien avulla voit käsitellä tyhjäarvoja turvallisesti:

  • Arvojen tarkistaminen: p.firstName IS NOT NULL – on etunimi
  • Vahvista tiedot: p.id > 0 - kelvollinen tunnus
  • Puuttuvien tietojen käsitteleminen: NOT coalesce(p.locationIP, '10.x.x.x') STARTS WITH '10.x.x.x' – ei muodostettu yhteyttä paikallisesta verkosta
  • Yhdistä ehdot: Käytä AND/OR eksplisiittisillä tyhjäarvotarkistuksilla monimutkaiselle logiikalle

Varoitus

Muista, että tyhjäarvoihin liittyvät ehdot palauttavat arvon UNKNOWN, joka suodattaa nämä rivit pois. Käytä eksplisiittisiä IS NULL tarkistuksia, kun tarvitset null-sisällyttävää logiikkaa.

ORDER BY lausunto

Syntaksi:

ORDER BY <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ],
         <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ], ...

Monitason lajittelu lasketuilla lausekkeilla:

MATCH (p:Person)
RETURN *
ORDER BY p.firstName DESC,               -- Primary: by first name (Z-A)
         p.birthday ASC,                 -- Secondary: by age (oldest first)
         p.id DESC                       -- Tertiary: by ID (highest first)

Tyhjäarvojen käsittely lajittelussa:

MATCH (p:Person)
RETURN p.firstName, p.birthday
ORDER BY p.birthday DESC NULLS LAST, p.firstName ASC

Lajittelun toiminnan tiedot:

Toimintatavan ORDER BY ymmärtäminen:

  • Kyselymoduuli arvioi lausekkeet kullekin riville ja määrittää sitten rivijärjestyksen.
  • Useat lajitteluavaimet luovat hierarkkista järjestystä (ensisijainen, toissijainen, korkea-asteen järjestys jne.).
  • NULLS FIRST asettaa nollaarvot ei-nollaarvojen eteen. NULLS LAST sijoittaa ne ei-nollaarvojen jälkeen.
  • Nollasijoitus on riippumaton lajittelusuunnasta. Jos et määrittele nollajärjestystä, NULLS LAST onko oletus sekä ASC että DESC.
  • ASC (nouseva) on oletusjärjestys, ja sinun on määritettävä se eksplisiittisesti DESC (laskeva).
  • Voit lajitella laskettujen arvojen mukaan, et vain tallennettujen ominaisuuksien mukaan.
Lajittelumäärittely Tuloksena oleva järjestys
ASC tai ASC NULLS LAST Ei-nollaarvot kasvavassa järjestyksessä, jota seuraavat nollaarvot.
ASC NULLS FIRST Nollaarvot, joita seuraavat ei-nollaarvot kasvavassa järjestyksessä.
DESC tai DESC NULLS LAST Ei-nollaarvot laskevassa järjestyksessä, jota seuraavat nollaarvot.
DESC NULLS FIRST Nollaarvot, joita seuraavat ei-nollaarvot laskevassa järjestyksessä.

Varoitus

Vain välittömästi seuraava lauseke voi nähdä muodostettavan ORDER BY lajittelujärjestyksen. ORDER BY Tämän vuoksi by-toiminto RETURN * ei tuota järjestettyä tulosta.

Verrata:

MATCH (a:Person)-[r:knows]->(b:Person)
LET aName = a.firstName || ' ' || a.lastName
LET bName = b.firstName || ' ' || b.lastName
ORDER BY r.creationDate DESC
/* intermediary result _IS_ guaranteed to be ordered here */
RETURN aName, bName, r.creationDate AS since
/* final result _IS_ _NOT_ guaranteed to be ordered here  */

kanssa:

MATCH (a:Person)-[r:knows]->(b:Person)
LET aName = a.firstName || ' ' || a.lastName
LET bName = b.firstName || ' ' || b.lastName
/* intermediary result _IS_ _NOT_ guaranteed to be ordered here */
RETURN aName, bName, r.creationDate AS since
ORDER BY r.creationDate DESC
/* final result _IS_ guaranteed to be ordered here              */

Tällä erolla on välitön seuraus "Top-k"-kyselyille: LIMIT on aina noudatettava ORDER BY lauseketta, joka määrittää aiotun lajittelujärjestyksen.

OFFSET ja LIMIT lausekkeet

Syntaksi:

  OFFSET <offset> [ LIMIT <limit> ]
| LIMIT <limit>

Yleiset mallit:

-- Basic top-N query
MATCH (p:Person)
RETURN *
ORDER BY p.id DESC
LIMIT 10                                 -- Top 10 by ID

Tärkeää

Ennustettavissa olevia sivutustuloksia varten käytä aina aiempia ORDER BYOFFSETLIMIT ja varmista yhtenäinen rivien järjestys kyselyjen välillä.

RETURN: perustuloksen projektio

Syntaksi:

RETURN [ DISTINCT ] <expression> [ AS <alias> ], <expression> [ AS <alias> ], ...
[ ORDER BY <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ], ... ]
[ OFFSET <offset> ]
[ LIMIT <limit> ]

- RETURN lauseke tuottaa kyselyn lopullisen tuloksen määrittämällä, mitkä tiedot näkyvät tulostaulukossa.

Perustuloste:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName || ' ' || p.lastName AS name, 
       p.birthday, 
       c.name

Käyttämällä aliaksia selkeyden vuoksi:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName AS first_name, 
       p.lastName AS last_name,
       c.name AS company_name

Yhdistä lajitteluun ja top-k:hen:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName || ' ' || p.lastName AS name, 
       p.birthday AS birth_year, 
       c.name AS company
ORDER BY birth_year ASC
LIMIT 10

Kaksoiskappaleiden käsittely DISTINCT-funktion avulla:

-- Remove duplicate combinations
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN DISTINCT p.gender, p.browserUsed, p.birthday AS birth_year
ORDER BY p.gender, p.browserUsed, birth_year

Yhdistä koosteeseen:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT p) AS employee_count

RETURN jossa on GROUP BY: ryhmitelty tulosennuste

Syntaksi:

RETURN [ DISTINCT ] <expression> [ AS <alias> ], <expression> [ AS <alias> ], ...
GROUP BY <variable>, <variable>, ...
[ ORDER BY <expression> [ ASC | DESC ], <expression> [ ASC | DESC ], ... ]
[ OFFSET <offset> ]
[ LIMIT <limit> ]

Käytä tätä GROUP BY rivien ryhmittelemiseen jaettujen arvojen mukaan ja koostefunktioiden laskemiseen kussakin ryhmässä.

Perus ryhmittely ja kooste:

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId,
       companyName,
       count(*) AS employeeCount,
       avg(p.birthday) AS avg_birth_year
GROUP BY companyId, companyName
ORDER BY employeeCount DESC

Monisarakkeinen ryhmittely:

MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
       browser,
       count(*) AS person_count,
       avg(p.birthday) AS avg_birth_year,
       min(p.creationDate) AS first_joined,
       max(p.id) AS highest_id
GROUP BY gender, browser
ORDER BY avg_birth_year DESC
LIMIT 10

Note

Vaakasuorasta aggregaatiosta muuttuvanpituisilla kuvioilla katso Aggregaatiofunktiot.

Arvot ja arvotyypit

GQL-arvoihin kuuluvat Boolean-, merkkijono-, numeeriset, ajalliset arvot, lista-, solmu-, reuna-, polku-, null- ja nolla-arvot. Tyypit ovat nollattavissa, ellei määrittele NOT NULL. Ominaisuudet käyttävät tuettua osajoukkoa koko kyselyarvojärjestelmästä.

RETURN 42 AS integerValue,
       'Alice' AS stringValue,
       TRUE AS booleanValue,
       [1, 2, 3] AS listValue

Vertailut nullin kanssa arvioidaan ; UNKNOWNkäytä IS NULL ja IS NOT NULL null-testejä varten. Numeeriset operaatiot voivat soveltaa implisiittisiä muunnoksia yhteensopivien numeeristen tyyppien välillä.

Note

Kaikkia GQL-arvotyyppejä ei tueta kaikissa graafikonteksteissa. Nykyiset ominaisuus- ja kyselyrajoitukset löytyvät kohdasta Data types.

Kirjaimellisen syntaksin, vertailukäyttäytymisen, tyyppimuunnosten ja tyyppihierarkian osalta katso GQL-arvot ja arvotyypit.

Lausekkeet

Lausekkeet laskevat, vertaavat, yhdistävät ja muuntavat arvoja. Yleisiä muotoja ovat ominaisuusviittaukset, aritmeettiset ja loogiset operaattorit, predikaatit, funktiokutsut, yksinkertaiset CASE lausekkeet ja alikyselyt:

MATCH (person:Person)
FILTER person.birthday < 19900101
RETURN person.firstName,
       CASE person.gender
         WHEN 'female' THEN 'F'
         WHEN 'male' THEN 'M'
         ELSE 'Other'
       END AS genderCode

GQL käyttää kolmiarvoista logiikkaa: Boolen lausekkeet voivat arvioida , TRUEFALSE, tai UNKNOWN. A FILTER säilyttää vain rivejä, joiden predikaatti on TRUE.

Aggregaatiofunktiot kuten COUNT, SUM, AVG, MIN, ja MAX tiivistävät rivejä. Listaa predikaatit kuten ALL, ANY, NONE, ja SINGLE arvioi predikaatti listan alkioille. Proseduurimuotoiset EXISTS alikyselyt testaavat, palauttaako sisäkkäinen kysely rivin.

Täydellistä operaattori-, predikaat-, aggregaatti- ja funktiokäyttäytymistä varten katso GQL-lausekkeet, predikaatit ja funktiot. Tehtäväpohjaisia suodatus- ja ryhmittelyesimerkkejä löytyy kohdasta Suodata ja aggregoitu graafidata.

Kehittyneet kyselytekniikat

Tässä osiossa käsitellään kehittyneitä malleja ja tekniikoita monimutkaisten ja tehokkaiden kaaviokyselyiden rakentamiseen. Nämä mallit ylittävät lausekkeen peruskäytön ja auttavat sinua luomaan tehokkaita analyyttisia kyselyitä.

Monitasoinen koostumus

Tärkeää

Graph tukee perustason ja täyden lineaarisen lausekkeen koostumusta. , EXCEPTINTERSECT, ja OTHERWISE set-operaatioita ei vielä tueta. Katso lisätietoja nykyisistä rajoituksista olevasta artikkelista.

Monimutkaisten kyselyiden luominen tehokkaasti on tärkeää edistyneissä kaaviokyselyissä.

UNION Ja UNION ALL

Käytä UNION, UNION DISTINCT, tai UNION ALL yhdistääksesi tulokset kahdesta tai useammasta lineaarisesta kyselylohkosta:

<query block>
UNION [ DISTINCT | ALL ]
<query block>
-- Combine results from two separate pattern matches
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName AS name, c.name AS affiliation
UNION DISTINCT
MATCH (p:Person)-[:studyAt]->(u:University)
RETURN p.firstName AS name, u.name AS affiliation

Bare UNION vastaa UNION DISTINCT; molemmat poistavat kaksoisrivejä. UNION ALL säilyttää kaikki rivit, mukaan lukien kaksoiskappaleet.

Jokaisen kyselylohkon on palautettava sama joukko sarakkeen nimiä. Sarakkeiden järjestys voi vaihdella lohkoittain, ja tietotyyppien on oltava yhteensopivia.

NEXT

Käytetään NEXT ajamaan toinen kyselyvaihe edellisen vaiheen palauttamaa taulukkoa vastaan:

<query stage>
RETURN <columns>
NEXT
<query stage>

Seuraava kysely löytää työntekijät ja heidän yrityksensä, ja käyttää sitten palautettuja työntekijäsolmuja toisessa kuvion osumassa:

MATCH (person:Person)-[:workAt]->(company:Company)
RETURN person, company.name AS companyName
NEXT
MATCH (person)-[:isLocatedIn]->(city:City)
RETURN person.firstName AS employee, companyName, city.name AS city

Vain edellisen vaiheen palauttamat sarakkeet ovat laajuudessa .NEXT Voit käyttää useita NEXT erottimia rakentaaksesi pidemmän sarjan kyselyvaiheita.

Kummassakin vaiheessa voi olla kyselylohkojen yhdiste. Liitto arvioidaan sen vaiheen sisällä ennen kuin vaiheen ulostulo ylittää NEXT rajan. Jos A, , ja C edustavat kyselylohkoja, A UNION B NEXT C ryhmittelevät muodossa (A UNION B) NEXT C, kun A NEXT B UNION C taas ryhmiä muodossa A NEXT (B UNION C)B.

Ehdolliset lausekkeet

Käytä ehdollista lausetta reitittämään jokainen saapuva rivi ensimmäiseen haaraan, jonka predikaatti arvioi :TRUE

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

Reitittääksesi rivit edellisestä kyselyvaiheesta, palauta vaaditut sarakkeet ja käytä NEXT ennen ehdollista lausetta:

MATCH (p:Person)
RETURN p.firstName AS name, p.birthday AS birthday
NEXT
WHEN birthday < 19800101u THEN
  RETURN name, 'Before 1980' AS era
WHEN birthday < 20000101u THEN
  RETURN name, '1980-1999' AS era
ELSE
  RETURN name, '2000 or later' AS era

Jokaisen WHEN predikaatin täytyy olla Boolean. Kyselymoottori arvioi predikaatit kunkin syöterivin kohdalla. Predikaatti, joka arvioi FALSE tai UNKNOWN ei valitse haaraansa. Kun predikaatti arvioi , TRUEmyöhemmät predikaatit ja valitsemattomat haarakappaleet eivät ole arvioitavissa. Jos predikaattia ei arvosteta ja TRUE ei ELSEole , syöteriviä ei palauteta.

Predikaatit ja haarakappaleet voivat viitata edellisen vaiheen sarakkeisiin. Haarautuminen voi olla yksi lineaarinen lause tai sisäkkäinen proseduuri, joka on suljettu rakenteisiin. Käytä sisäkkäistä proseduuria, kun haara tarvitsee useita vaiheita tai lauseita, kuten CALL:

MATCH (p:Person)
RETURN p, p.firstName AS name
NEXT
WHEN p.gender = 'female' THEN {
  CALL {
    MATCH (p)-[:knows]->(friend:Person)
    RETURN count(*) AS friendCount
  }
  RETURN name, friendCount
}
ELSE
  RETURN name, 0u AS friendCount

Jokaisella haaralla on oma paikallinen toimialueensa. Sisarhaarat eivät näe toisen haaran luomia muuttujia, ja vain valitun haaran viimeisen RETURN sarakkeen sarakkeet jatkuvat ehdollisen lauseen jälkeen. Jokaisen haaran on palautettava samat sarakkeennimet, ja vastaavat tulostyypit ovat yhteensopivia. Kyselymoottori pakottaa yhteensopivat tyypit yhteiseen lähtötyyppiin. Palautettu haara-sarake voi käyttää samaa nimeä kuin saapuva sarakke; haarautumisarvo korvaa saapuvan arvon ehdollisessa tulosteessa.

Ehdolliset väitteet eroavat lausekkeista CASE . Graafi tukee yksinkertaisia CASE <expression> WHEN <value>, mutta ei haettuja CASE WHEN <predicate> lausekkeita. Lisätietoja löytyy kohdasta Ehdolliset lausekkeet.

Muuttujan laajuus ja edistynyt työnkulun ohjausobjekti

Muuttujat yhdistävät tietoja kyselylausekkeisiin ja mahdollistavat monimutkaiset kaavion läpiviennit. Kehittyneiden vaikutusaluesääntöjen ymmärtäminen auttaa kirjoittamaan kehittyneitä monilausekekyselyitä.

Muuttujien sidonta- ja kopiointimallit

-- Variables flow forward through subsequent statements 
MATCH (p:Person)                                    -- Bind p 
LET fullName = p.firstName || ' ' || p.lastName     -- Bind concatenation of p.firstName and p.lastName as fullName
FILTER fullName CONTAINS 'Smith'                    -- Filter for fullNames with “Smith” substring (p is still bound)
RETURN p.id, fullName                               -- Only return p.id and fullName (p is dropped from scope) 

Muuttujien uudelleenkäyttö liitoksissa lausekkeissa

-- Multi-statement joins using variable reuse
MATCH (p:Person)-[:workAt]->(:Company)          -- Find people with jobs
MATCH (p)-[:isLocatedIn]->(:City)               -- Same p: people with both job and residence
MATCH (p)-[:knows]->(friend:Person)             -- Same p: their social connections
RETURN *

Tärkeät rajoittamisen säännöt ja rajoitukset

-- ✅ Backward references work
MATCH (p:Person)
LET adult = p.birthday < 20061231  -- Can reference p from previous statement
RETURN *

-- ❌ Forward references don't work  
LET adult = p.birthday < 20061231  -- Error: p not yet defined
MATCH (p:Person)
RETURN *

-- ❌ Variables in same LET statement can't reference each other
MATCH (p:Person)
LET name = p.firstName || ' ' || p.lastName,
    greeting = 'Hello, ' || name     -- Error: name not visible yet
RETURN *

-- ✅ Use separate statements for dependent variables
MATCH (p:Person)
LET name = p.firstName || ' ' || p.lastName
LET greeting = 'Hello, ' || name     -- Works: name now available
RETURN *

Muuttujan näkyvyys monimutkaisissa kyselyissä

-- Variables remain visible until overridden or query ends
MATCH (p:Person)                     -- p available from here
LET gender = p.gender                -- gender available from here  
MATCH (p)-[:knows]->(e:Person)       -- p still refers to original person
                                     -- e is a new variable for the friend
RETURN p.firstName AS manager, e.firstName AS friend, gender

Varoitus

Saman lausekkeen muuttujat eivät voi viitata toisiinsa lukuun ottamatta kaaviomalleja. Käytä erillisiä lausekkeita riippuvaisten muuttujien luomiseen.

Aggregaattirivit ja polkuelementit

GQL tukee kahta aggregaatiokontekstia:

  • Pystysuora aggregointi tiivistää syöterivit, jotka on halutessasi jaettu muuttujilla GROUP BY .
  • Vaaka-aggregaatio tiivistää ryhmälistan, joka on sidottu muuttuvan pituiseen reunakuvioon yhden sovitetun polun sisällä.
MATCH (person:Person)-[:workAt]->(company:Company)
LET companyId = company.id, companyName = company.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
MATCH (:Person)-[connections:knows]->{1,4}(:Person)
RETURN count(connections) AS pathLength

Ryhmitellyistä kyselyistä, aggregaattikohtaisista suodattimista, kokoelmaaggregaateista ja ehdollisesta reitityksestä katso Suodatus- ja aggregoitu graafidata. Täydelliset aggregaattitulossäännöt löytyvät kohdasta Aggregaatiofunktiot.

Käsittele nollat ja kyselyvirheet

Käytä eksplisiittisiä nollatestejä, kun puuttuvat arvot vaativat erillisen käsittelyn:

MATCH (person:Person)
FILTER person.browserUsed IS NULL
RETURN person.firstName

Vertailu nollalla arvioi , UNKNOWNjota a FILTER ei säilytä. Käytä coalesce() silloin, kun tarvitset varasuunnitelman arvon.

Kyselyn tuloksiin kuuluvat onnistumisen tilatiedot, varoitukset, tietojen puute, käyttäjän korjaamat virheet ja järjestelmävirheet. Käytä julkista tilakoodia laajaan ohjausvirtaan ja kanonista GQLSTATUS-diagnostiikkaa tietylle sairaudelle. Katso Suoritustulokset ja tulokset sekä GQL-tilakoodien viite.

Varatut sanat

GQL varaa tietyt avainsanat, joita et voi käyttää tunnisteina, kuten muuttujat, ominaisuuksien nimet tai otsikkojen nimet. Täydellinen luettelo löytyy GQL:n varattujen sanojen viittauksesta .

Jos sinun on käytettävä varattuja sanoja tunnisteina, voit välttää niitä käyttämällä asetuksilla: `match`, `return`.

Voit välttää varattujen sanojen välttelyn tällä nimeämiskäytännöllä:

  • Lisää yksisanaisille tunnisteille alaviiva: :Product_
  • Käytä usean sanan tunnisteissa camelCase- tai PascalCase-kirjaimia: :MyEntity, , :hasAttributetextColor

Seuraavat vaiheet