GQL-kaavion kuviot

Kaaviomallit ovat GQL-kyselyiden keskeisiä rakenneosia Microsoft Fabricin kaaviossa. Ne kuvaavat kaaviosta etsityjä rakenteita käyttämällä solmuja ja reunoja intuitiivisella ja visuaalisella tavalla. Ajattele kaaviomalleja malleina, joita kyselymoduuli yrittää verrata kaavion todellisiin tietoihin.

Tässä artikkelissa kerrotaan GQL:n kaaviokuvioiden syntaksi- ja koostumussäännöistä.

Tärkeää

Tässä artikkelissa käytetään yksinomaan sosiaalisen verkoston esimerkkikaaviodatasettiä.

Yksinkertaiset elementtimallit

Yksinkertaisten elementtimallien avulla voit yhdistää kaavion yksittäiset solmut ja reunat, jotka täyttävät tietyt vaatimukset. Nämä mallit muodostavat perustan monimutkaisemmalle kuvioiden vastaav sille.

Yksinkertaiset solmumallit

Solmumalli määrittää selitteet ja ominaisuudet, jotka solmun on vastattava:

(:Place&City { name: "New York" })

Tämä malli vastaa kaikkia solmuja, joilla on sekä - että -PlaceCity otsikot (operaattorin osoittama), ja joiden & ominaisuuden name arvo on "New York". Tämä pakollisten otsikoiden ja ominaisuuksien yhdistelmää kutsutaan solmumallin täytetoiminnoksi .

Avainkäsitteet:

  • Otsikoiden vastaavuus: Käytä & tätä, jos haluat edellyttää useita otsikoita.
  • Ominaisuuden suodatus: Määritä tarkat arvot, joita ominaisuuksien on vastattava.
  • Joustava ("kovavarianssi")-vastaavuus: Vastaavilla solmuilla voi olla enemmän selitteitä ja ominaisuuksia kuin määritetyillä.

Note

Solmuissa voi olla useita otsikoita, mutta reunatyyppejä, joissa on useita otsikoita, ei vielä tueta.

Yksinkertaiset reunamallit

Reunamallit ovat monimutkaisempia kuin solmumallit. Ne eivät ainoastaan määritä täytettä, vaan myös yhdistävät alkuperäisen solmukuvion kohdesolmukuvioon. Reunamallit kuvaavat vaatimuksia sekä reunassa että sen päätepisteissä:

(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)

Nuolen suunta -[...]-> on tärkeä—se määräytyy (:Person) origosolmukuviona ja (:Comment) kohdesolmukuviona. Reunan suunnan ymmärtäminen on tärkeää, jotta kaavioon voidaan tehdä kyselyjä oikein.

Vastaava peilattu malli:

Voit kääntää nuolen ja vaihtaa solmukuvioita luodaksesi vastaavan, peilatun reunakuvion:

(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)

Tämä malli löytää samat suhteet, mutta vastakkaisesta näkökulmasta.

Mihin tahansa kohdistettavat reunamallit

Kun kaavion reunan suunnalla ei ole merkitystä kyselylle, voit jättää sen määrittämättä luomalla mihin tahansa suunnattuun reunamalliin:

(:Song)-[:inspired]-(:Movie)

Tämä kuvio vastaa samoja reunoja kuin (:Song)-[:inspired]->(:Movie) ja (:Movie)-[:inspired]->(:Song) yhdistettynä, riippumatta siitä, mikä solmu on origo ja mikä kohde (tämä esimerkki ei ole sosiaalisen verkoston graafityypistä).

Kaavion reunakuvion pikanäppäimet

GQL tarjoaa kätevät pikakuvakkeet yleisiin reunakuvioihin, jotta kyselyistäsi tulee tiiviimpiä:

  • ()->() tarkoittaa ( ()-[]->() suunnatun reunan millä tahansa selitteellä)
  • ()<-() ()<-[]-() tarkoittaa (suunnatun reunan käänteisessä käänteessä minkä tahansa selitteen kanssa)
  • ()-() tarkoittaa ( ()-[]-() kaikki suunnatun reunan selitteellä)

Näistä pikakuvakkeista voi olla hyötyä, kun yhteys on sinulle tärkeä, mutta ei tiettyyn kaavion reunatyyppiin.

Otsikkolausekkeet

Patterns voi ilmaista monimutkaisia vaatimuksia vastaavien solmujen ja reunojen otsikoissa.

Esimerkki:

MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches

Tämä laskee niiden reunojen määrän isLocatedIn , jotka yhdistävät Person solmuja tai Organization–mutta ei-Company solmuja (jotka ovat aina University yhteisöpalveluverkon rakenteen solmuja) City tai Country solmuihin.

Syntaksi:

Syntaksi Merkitys
A&B Otsikoiden on sisällettävä sekä A että B.
A\|B Otsikoiden on sisällettävä vähintään yksi A-tai B-merkinnöistä.
!A Otsikoiden on jätettävä A pois.

Voit lisäksi hallita otsikkolausekkeen arvioinnin järjestystä käyttämällä sulkeita. On oletusarvoisesti ! etusijalla, ja & sen käsittelyjärjestys on suurempi kuin |. Tämän vuoksi !A&B|C|!D se on sama kuin ((!A)&B)|C|(!D).

Sidontamuuttujat

Muuttujien avulla voit viitata vastaaviin kaavion elementteihin kyselyn muissa osissa. Muuttujien sitomisen ja käytön ymmärtäminen on välttämätöntä tehokkaiden kyselyiden luomisen kannalta.

Sidontaelementtimuuttujat

Sekä solmu että reunakuvio voivat sitoa vastaavat solmut ja reunat muuttujiin myöhempää viittausta varten.

(p:Person)-[w:workAt]->(c:Company)

Tässä mallissa p se on sidottu vastaaviin Person solmuihin, w vastaaviin workAt reunojan ja c vastaaviin Company solmuihin.

Rakenteellisten rajoitusten muuttujan uudelleenkäyttö:

Saman muuttujan uudelleenkäyttö mallissa useita kertoja ilmaisee rajoituksen vastaavuudet. Saman muuttujan jokaisen esiintymän on aina sidottava samaan kaavioelementtiin kelvolliksessa. Muuttujien uudelleenkäyttö on tehokas monimutkaisten rakennevaatimusten ilmaisemiseen.

(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)

Malli löytää solmut Person jax, jotka tuntevat toisensa ja toimivat samalla y, joka on sidottu muuttujaan Companyc . Kohteen uudelleenkäyttö c varmistaa, että molemmat henkilöt työskentelevät samassa yrityksessä.

Mallipredikaatit, joissa on elementtimuuttujia:

Sidovan elementin muuttujien avulla voit määrittää solmun ja reunakuvion predikaatit. Sen sijaan, että täytät vain tarkat ominaisuusarvot, kuten { name: "New York, USA" }, täytetoiminto voi määrittää predikaatin, joka arvioidaan kullekin hakijaelementille. Malli vastaa vain, jos predikaatti antaa tulokseksi TRUE:

(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)

Reunakuvio löytää ihmiset, jotka tunsivat toisensa 1.1.2000 jälkeen käyttämällä joustavaa ehtoa tarkan vastaavuuden sijaan.

Note

Reunakuvion muuttujat sitoutuvat aina reunakuvion predikaatin yksittäiseen reunaan, vaikka käyttäisit vaihtelevan pituisia kuvioita. Tämä voi auttaa sitä, ettei jälkisuodattimen suorittamista tarvitse käyttää poistamatta reunaryhmän luettelomuuttujia. Katso Sido muuttujan pituiset kuvion reunamuuttujat.

Edistyneet mallipredikaattitekniikat:

Mallipredikaatit tarjoavat tehokkaita sisäisen suodatusominaisuuden, jotka voivat parantaa kyselyn luettavuutta:

-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.birthday < 19900101 AND p.gender = 'female')
      -[:workAt]->
      (c:Company WHERE c.name STARTS WITH 'A')

-- Filter on an edge property
MATCH (p1:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)

-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.browserUsed = 'Firefox' AND c.name IS NOT NULL

-- Filter during matching and after
MATCH (p:Person WHERE p.gender = 'male')-[:workAt]->(c:Company)
WHERE p.birthday < 19900101 AND c.url IS NOT NULL

Vihje

Pidä predikaatti kuvion sisällä, kun se kuvaa, mikä solmu tai reuna voi osallistua otteluun.

Sidontapolkumuuttujat

Voit myös sitoa vastaavan polun polkumuuttujaan jatkokäsittelyä varten tai palauttaa täydellisen polkurakenteen käyttäjälle:

p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)

Tässä sidotaan polkuarvoon, p joka edustaa täyttä vastaavuutta polun rakennetta, mukaan lukien viitearvot kaikille solmuille ja reunuksille annetussa järjestyksessä.

Sidotut polut voidaan palauttaa käyttäjälle tai käsitellä edelleen funktioilla kuten NODES tai EDGES:

MATCH p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
LET path_edges = edges(p)
RETURN path_edges, size(path_edges) AS num_edges
GROUP BY path_edges

Laadi malleja

Reaalimaailman kyselyt vaativat usein monimutkaisempia kuvioita kuin yksinkertaiset solmureunan solmurakenteet. GQL tarjoaa useita tapoja luoda kuvioita kehittyneille kaavioiden läpikuluille.

Luo polkumalleja

Polkumallit voidaan muodostaa ketjuttamalla yksinkertaiset solmu- ja reunamallit pidempien läpikulkujen luomiseksi.

(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)

Malli kulkee henkilöltä sosiaalisten ja ammattimaisten yhteyksien kautta löytääkseen, missä hänen työtoverinsa yritys sijaitsee.

Osarakenne: Voit myös kehittää polkumalleja lisäävämmin, mikä voi helpottaa monimutkaisten mallien lukemista ja ymmärtämistä:

(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)

Tämä menetelmä jakaa saman läpikulun loogisiin vaiheisiin, mikä helpottaa ymmärtämistä ja virheenkorjaustapaa.

Onlinear-mallien laatiminen

Kuvion tuloksena syntyvän muodon ei tarvitse olla lineaarinen polku. Voit yhdistää monimutkaisempia rakenteita, kuten "tähtimuotoisia" kuvioita, jotka säteilevät keskussolmusta:

(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)

Tämä malli löytää henkilön koulutuksen, työllisyyden ja sisältömieltymysten ohella kerralla – kattavan profiilikyselyn.

Saman MATCH kaavojen ei tarvitse jakaa muuttujaa. Irtoutuneet kuviot muodostavat karteesisen tulon niiden osuuksista. Käytä muuttujaa uudelleen, kun kuvioiden tulisi sitoutua samaan graafielementtiin ja vain yhdistetyt yhdistelmät säilyvät.

Ohjauselementtien uudelleenkäyttö

GQL ohjaa toistuvia solmuja ja reunoja kahdella tasolla:

  • Match-tila koskee koko graafikuviota, mukaan lukien pilkulla erotellut polut.
  • Polkutila koskee vain yhtä polkua.

Oletusottelutila on REPEATABLE ELEMENTS. Se mahdollistaa saman elementtisidonnan tapahtumisen eri osissa graafikuviota, riippuen kunkin polun polkutilasta. Voit kirjoittaa sen eksplisiittisesti:

REPEATABLE ELEMENTS (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)

Käytä DIFFERENT EDGES tai sen synonyymiä DIFFERENT RELATIONSHIPS vaatimaan reunojen ainutlaatuisuutta koko graafikuvion yli. Tämä match-tila muuttaa myös minkä tahansa WALK polun kuviossa käyttäytymiseen TRAIL .

DIFFERENT EDGES (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)

Seuraavat polkutilat ohjaavat toistuvia elementtejä kullakin polulla:

Polkutila Elementtien uudelleenkäyttö
WALK Solmut ja reunat voivat toistua.
TRAIL Reunat eivät voi toistaa, mutta solmut voivat toistaa.
SIMPLE Solmut eivät voi toistua, paitsi että ensimmäinen ja viimeinen solmu voivat olla samat. Reunat eivät voi toistaa.
ACYCLIC Solmut eivät voi toistaa, mukaan lukien ensimmäinen ja viimeinen solmu. Reunat eivät voi toistaa.

WALK on oletuspolkutila. Polun etuliite toisella moodilla, kun tarvitset tiukempaa elementtien ainutlaatuisuutta:

Jos SIMPLE ja ACYCLIC, särmien ainutlaatuisuus seuraa solmun ainutlaatuisuudesta. Polku SIMPLE voi sulkeutua palaamalla ensimmäiseen solmuunsa, mutta se ei silti voi käyttää reunaa uudelleen.

TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)

Kuvio TRAIL tuottaa vain osumia, joissa e1, e2, ja e3 ovat erilaisia. Solmut voivat silti toistua, joten polku voi muodostaa syklin ilman, että reunaa käytetään uudelleen.

Hallitse, mitkä reitit palautuvat

Polun haun etuliite ohjaa, mitkä polut polkukuvio palauttaa. Oletusetuliite ALL palauttaa kaikki polut, jotka vastaavat polkumuotoa ja -kuviota. Voit kirjoittaa ALL eksplisiittisesti:

ALL TRAIL (a:Person)-[:knows]->{1,4}(b:Person)

Käytä ANY SHORTEST palauttamaan lyhimmän vastaavuuspolku jokaiselle lähde-kohde-parille jokaisesta syöterivistä:

MATCH p = ANY SHORTEST
  (src:Person)-[:knows]->{1,4}(dst:Person)
RETURN src.id AS sourceId, dst.id AS targetId, path_length(p) AS hopCount
ORDER BY sourceId, targetId
LIMIT 100

Jos useat polut sitoutuvat lyhimmällä pituudella, kysely palauttaa yhden niistä, mutta sidottu polku ei ole deterministinen. Nollan alaraja voi palauttaa nollahypyn polun lähdesolmusta itseensä.

ALL SHORTEST Ja ANY polkuhakuja ei tueta.

Aseta predikaatit ennen tai jälkeen polun valinnan

Predikaatin sijoittelu määrittää, määritteleekö ehto kelvolliset polut vai suodattaako polut sen jälkeen, kun polkuhakuetuliite on valinnut ne:

  • Solmussa tai reunakuviossa oleva inline WHERE on osa kuviota. Se rajoittaa, mitkä reitit ovat kelpoisia ennen ALL tai ANY SHORTEST mitä niitä käytetään.
  • Lausetaso WHERE täydellisen kuvion MATCH jälkeen on postfilter. Se suodattaa rivit sen jälkeen, kun polkuhakuetuliite on valittu polut.
  • Seuraava FILTER lause suodattaa myös rivejä polun valinnan jälkeen.

Tämä ero on erityisen tärkeä, kun ANY SHORTEST. Seuraavassa mallissa vain knows särmät, jotka on luotu määritellyn päivämäärän aikana tai sen jälkeen, ovat kelvollisia, kun kysely valitsee lyhimmän polun:

MATCH p = ANY SHORTEST
  (src:Person WHERE src.firstName = 'Alice')
  -[connection:knows
    WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z')]->{1,4}
  (dst:Person WHERE dst.firstName = 'Bob')
RETURN p

Reunaehdon siirtäminen jälkisuodattimeen muuttaa merkityksen. Kysely valitsee ensin lyhimmän polun ilman tätä ehtoa. Se poistaa valitun polun, jos jokin reuna epäonnistuu ehdon; se ei valitse pidempää polkua sen sijaan:

MATCH p = ANY SHORTEST
  (src:Person WHERE src.firstName = 'Alice')
  -[connections:knows]->{1,4}
  (dst:Person WHERE dst.firstName = 'Bob')
FILTER ALL(connection IN connections
           WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z'))
RETURN p

Tärkeää

Joillekin ANY SHORTEST kyselymuodoille Graph voi tällä hetkellä soveltaa lausetason MATCH ... WHERE ehtoa ennen polun valintaa. Kunnes tämä rajoitus on ratkaistu, käytä inline-predikaatteja polkukelpoisuuteen ja erillistä FILTER lausetta jälkivalintasuodatukseen. Lisätietoja löytyy kohdasta Nykyiset rajoitukset.

Käytä vaihtelevan pituisia kuvioita

Vaihtelevan pituiset mallit ovat tehokkaita rakenteita, joiden avulla voit löytää eri pituisia polkuja kirjoittamatta toistuvia mallimäärityksiä. Ne ovat välttämättömiä hierarkioiden, sosiaalisten verkostojen ja muiden rakenteiden läpiviennissä, joissa optimaalisen polun pituutta ei tiedetä etukäteen.

Rajatut vaihtelevan pituiset mallit

Monet yleiset kaaviokyselyt edellyttävät saman reunamallin toistamista useita kertoja. Sen sijaan, että kirjoittaisit yksityiskohtaisia kuvioita, kuten:

(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)

Voit käyttää tiiviimpää muuttujan pituista syntaksia:

(:Person)-[:knows]->{3}(:Person)

{3} määrittää, että -[:knows]-> reunakuvio tulee toistaa täsmälleen kolme kertaa.

Joustavat toistoalueet: Joustavuuden lisäämiseksi voit määrittää sekä alarajan että toiston ylärajan:

(:Person)-[:knows]->{1, 3}(:Person)

Tämä malli löytää suorat ystävät, ystävien ystävät ja ystävien ystävät kaikki yhdestä kyselystä.

Note

Alaraja voi myös olla nolla. Nollahyppy-sovitus ei sisällä särmiä ja vaatii, että molemmat päätepisteen solmukuviot vastaavat samaa solmua.

Esimerkki:

(p1:Person)-[:knows]->{0,1}(p2:Person)

Tämä kuvio vastaa jokaista henkilöä sekä p1 hypyillä että p2 nollahypyillä, ja yhdistetyt parit yhdessä hypyssä.

Kun alaraja ei ole määritelty , {,n}se oletuksena on nolla.

Monimutkaiset muuttuvan pituiset koostumukset: Muuttuvan pituiset kuviot voivat olla osa suurempia ja monimutkaisempia kuvioita, kuten seuraavassa kyselyssä:

MATCH (c1:Comment)<-[:likes]-(p1:Person)-[:knows]-(p2:Person)-[:likes]->(c2:Comment),
      (c1:Comment)<-[:replyOf]-{1,3}(m)-[:replyOf]->{1,3}(c2:Comment)
RETURN *
LIMIT 100

Kuvio löytää kommenttipareja, joissa toisensa tuntevat ihmiset tykkäsivät eri kommenteista, ja viesti m yhdistetään jokaiseen kommenttiin yhdestä kolmeen replyOf reunaan perustuvalla ketjulla.

Sido vaihtelevan pituiset kuvion reunamuuttujat

Kun sidot vaihtelevan pituisen reunamallin, reunamuuttujan arvo ja tyyppi muuttuvat viitekontekstin mukaan. Tämän toiminnan ymmärtäminen on tärkeää vaihtelevan pituisten vastaavuuksien oikeassa käsittelyssä:

Kaksi viiteastetta:

  • Vaihtelevan pituisen kuvion sisällä: Graph-reunamuuttujat sitoutuvat kuhunkin yksittäiseen reunaan täsmäytetyllä polulla (kutsutaan myös "yhdentonin viiteasteeksi")
  • Vaihtelevan pituisen kuvion ulkopuolella: Kaavion reunamuuttujat sitoutuvat vastaaneen polun kaikkien reunojen järjestykseen (kutsutaan myös "ryhmän viiteasteeksi")

Esimerkki molempien kontekstien esittelemisesta:

MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100

Reunamuuttujan e arviointi tapahtuu kahdessa kontekstissa:

  • MATCH Lausunnossa: Kysely löytää ystävien ja ystävien ystävien ketjuja, joihin jokainen ystävyys on perustettu vuodesta 2000 lähtien. Kuvioiden vastaavuuden aikana reunakuvion predikaatti e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z") arvioidaan kerran kunkin hakijareunan kohdalla. Tässä kontekstissa e se sidotaan yksittäiseen reunaviittausarvoon.

  • LausekkeessaRETURN: Tässä sidotaan (ryhmään) reunaviittausarvojen luettelo siinä järjestyksessä, e jossa ne esiintyvät täsmäytetyssä ketjussa. -tulos e[0] on jokaisen täsmäytetun ketjun ensimmäinen reunaviittausarvo.

Muuttuvan pituuskuvion reunamuuttujat vaakasuorassa aggregaatiossa:

Reunamuuttujat, jotka on sidottu muuttuvan pituuden kuvioiden sovittamiseen, ovat ryhmälistoja, jotka ovat muuttuvan pituuskuvion ulkopuolella, ja siksi niitä voidaan käyttää vaakasuoraan aggregaatiossa.

MATCH (a:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}(b)
RETURN a, b, size(e) AS num_edges
LIMIT 100

Lisätietoja löytyy kohdasta Aggregaatiofunktiot.

Sitomattomat vaihtelevan pituiset mallit

Käytä rajoittamatonta kvanttoria, kun suurin polun pituus ei ole tiedossa:

-- Two or more edges
TRAIL (:Person)-[:knows]->{2,}(:Person)

* Ja + oikokuvakkeet määrittelevät nolla tai enemmän ja yhden tai useamman toiston:

-- Zero or more edges
ACYCLIC (:Person)-[:knows]->*(:Person)

-- One or more edges
SIMPLE (:Person)-[:knows]->+(:Person)

Rajoittamaton kuvio, jossa on oletusyhdistelmä ALL WALK , hylätään, koska syklit voivat tuottaa äärettömän monta vastaavaa polkua. Käytä TRAIL, SIMPLE, tai ACYCLIC rajaamaan reitin reunan tai solmun unikaalisuuden kautta. Nämä tilat takaavat päätekohdan, mutta suuri graafi voi silti tuottaa suuren määrän polkuja.

Tärkeää

Polulle, joka on sidottu rajoittamattomaan ANY SHORTEST WALK, ainoat tuetut käyttötarkoitukset ovat PATH_LENGTH(path) ja sen rinnalla . path IS NULL Graafi ei toteuta koko polkua tässä muodossa. Käytä äärellistä ylärajaa tai määritä TRAIL, SIMPLE, tai ACYCLIC palautetaan tai muuten käytä polkua.