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.
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
WHEREon osa kuviota. Se rajoittaa, mitkä reitit ovat kelpoisia ennenALLtaiANY SHORTESTmitä niitä käytetään. - Lausetaso
WHEREtäydellisen kuvionMATCHjälkeen on postfilter. Se suodattaa rivit sen jälkeen, kun polkuhakuetuliite on valittu polut. - Seuraava
FILTERlause 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:
MATCHLausunnossa: 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 predikaattie.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")arvioidaan kerran kunkin hakijareunan kohdalla. Tässä kontekstissaese sidotaan yksittäiseen reunaviittausarvoon.Lausekkeessa
RETURN: Tässä sidotaan (ryhmään) reunaviittausarvojen luettelo siinä järjestyksessä,ejossa ne esiintyvät täsmäytetyssä ketjussa. -tulose[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.