Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
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:
- Yleisten GQL-kyselyiden kirjoittaminen – naapurit , usean hypyn läpikulku, jaetut yhteydet ja entiteettien olemassaolotarkistukset
- Suodatin- ja koostekaaviotiedot — FILTER-, WHERE-, GROUP BY- ja koostefunktiot
- Kirjoita kaaviomallikyselyt — monihypyn mallit , polkutilat, muuttujan uudelleenkäyttö ja VALINNAINEN VASTAAvuus
- GQL-kyselyjen suorituskyvyn optimointi – suodatusstrategia, rajat läpivientissä ja tärkeimpien rajoitteiden suositukset
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, jaRETURNdatan 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.
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:
-
MATCHetsii kaikki solmut, jotka on merkittyPerson. -
RETURNnä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:
-
MATCHetsii kaikki person-merkinnällä merkityt solmut (p). -
FILTERsolmut (p), joiden etunimi on Alice. -
RETURNnä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:
-
MATCHlöytää kaikki solmuparitPerson, jotka tuntevat toisensa. -
FILTERsäilyttää vain parit, joissa molemmilla ihmisillä on samat syntymäpäivät. -
RETURNlaskee, 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. -
OFFSETjaLIMIT: 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ä.
-
NEXTaloittaa uuden kyselyvaiheen. Seuraavassa vaiheessa on käytettävissä vain edellisen lauseen projissoimatRETURNsarakkeet. -
UNION,UNION DISTINCT, jaUNION ALLyhdistä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:
-
MATCHLöytää ihmisiä, jotka työskentelevät yrityksissä. -
LETluo täydet nimet yhdistämällä etu- ja sukunimet. -
FILTERpitää vain työntekijöitä, joiden nimessä on "Air". -
ORDER BYlajittelee koko nimen mukaan. -
LIMITsaa ensimmäiset 10 tulosta. -
RETURNpalauttaa 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
WHEREsuodattimet 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ä
LETlauseessa 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/OReksplisiittisillä 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 FIRSTasettaa nollaarvot ei-nollaarvojen eteen.NULLS LASTsijoittaa ne ei-nollaarvojen jälkeen. - Nollasijoitus on riippumaton lajittelusuunnasta. Jos et määrittele nollajärjestystä,
NULLS LASTonko oletus sekäASCettäDESC. -
ASC(nouseva) on oletusjärjestys, ja sinun on määritettävä se eksplisiittisestiDESC(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
- Seuraa pikaaloitus - tai GQL-opetusta saadaksesi käytännön johdannon.
- Käytä Write common GQL -kyselyitä valmiisiin mukautettaviin graafitehtäviin.
- Käytä GQL-graafikuvioita, GQL-lausekkeita, predikaatteja ja funktioita sekä GQL-arvoja ja arvotyyppejä yksityiskohtaiseen viitteeksi.
- Käytä Suunnittele graafiskeemaa tuetulle Fabric-mallinnustyönkulle.