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.
Graafikuvioiden sovitus antaa sinun kuvata haluamasi datan rakennetta intuitiivisen, visuaalisen syntaksin avulla. Sen sijaan, että yhdistäisit taulukoita, kirjoitat kuvioita, jotka näyttävät itse suhteilta – solmut, jotka on yhdistetty reunoilla. Tässä artikkelissa näytetään, miten GQL-kuviokyselyt kirjoitetaan yleisille skenaarioille Microsoft Fabric -graafissa.
Esimerkit käyttävät sosiaalisen verkoston otosaineistoa. Täydellisen mallisyntaksin viitteestä löytyy GQL-graafikuvioista.
Käytä tätä artikkelia oppiaksesi, miten solmu-, reuna- ja polkukuvioita rakennetaan ja yhdistetään. Valmiita mukautettavia tehtäviä, kuten naapureiden tai yhteyksiä vailla olevien entiteettien löytämistä, kohdasta Kirjoita yleisiä GQL-kyselyitä. Suodatuksen, ryhmittelyn ja aggregointityönkulkujen osalta katso Suodata ja aggregoitu graafidata.
Edellytykset
- Graafialkio, joka on rakennettu sosiaalisen verkoston otosaineistosta, jossa on solmutyypit, reunatyypit ja ominaisuudet, jotka on kuvattu sosiaalisen verkoston skeeman esimerkissä.
- Perusasioiden ja
MATCHkysymysten tuntemusRETURN. Katso GQL:n kieliopas.
Suorat suhteet
Peruskuvio vastaa solmutyyppiä, tiettyä reunatyyppiä ja toista solmutyyppiä. Syntaksi näyttää suhteen kaaviolta.
Esimerkiksi löytääksesi jopa 100 henkilöä, jotka on yhdistetty siihen yritykseen, jossa he työskentelevät:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
Käytä suuntaamatonta reunakuviota, kun et tiedä tai välitä suunnasta. Esimerkiksi löytääksesi jopa 100 yhteistä tuttavaa riippumatta siitä, kuka aloitti yhteyden:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Note
Graph ei tällä hetkellä tue suuntautumattomien reunojen luomista, mutta voit kysyä reunoja mihin tahansa suuntaan käyttämällä -[:label]- syntaksia.
Suodatinkuvioita, joissa on inline WHERE
Aseta WHERE kuvion sisälle, kun ehto määrittelee, mikä solmu tai reuna voi osallistua otteluun. Käytä lausetasoista MATCH ... WHERE ehtoa valmiin vastaavuuden jälkisuodattamiseen tai erillistä FILTER , kun ehto koskee aiemman lauseen tuottamaa riviä. Predikaatin sijoittelu voi muuttaa lyhimpien polkujen tuloksia. Lisätietoja löytyy kohdasta Paikkapredikaatit ennen tai jälkeen polun valinnan.
Esimerkiksi löytääksesi ennen vuotta 1990 syntyneet henkilöt, jotka työskentelevät yrityksessä, jonka nimi alkaa A:lla:
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Suodata reunan ominaisuuksia rajoittamaan, mitkä suhteet täsmäävät. Esimerkiksi, palautetaan vain henkilöt, jotka aloittivat työskentelyn yrityksessä vuonna 2010 tai myöhemmin:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
Yhdistä monihyppysuhteet
Käytä vaihtelevan pituisia kuvioita useiden hyppyjen läpikäymiseen yhdessä lausekkeessa. Määritä minimi- ja maksimihumalamäärä syntaksin {min,max} avulla.
Esimerkiksi löytääksesi jopa 100 ihmistä, jotka ovat tavoitettavissa kahden tai neljän ystävyysasteen sisällä Alicesta:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Löytääksesi jopa 100 välitöntä ja toisen asteen yhteyttä (yksi tai kaksi hyppyä) Alicelta:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Ohjauskulku polkumoodien avulla
Oletuksena GQL käyttää WALK, mikä mahdollistaa toistuvat solmut ja reunat. Käytä toista polkutilaa, kun tarvitset tiukempaa elementtien ainutlaatuisuutta.
| Polkutila | Toimintatapa | Käytä kun... |
|---|---|---|
WALK |
Sallii toistuvat solmut ja reunat (oletuksena) | Haluat kaikki vastaavat kävelyt rajallisen rajan sisällä. |
TRAIL |
Ei toistuvia reunoja | Haluat välttää saman reunan toistamista, mutta sama solmu voi ilmestyä eri reunojen läpi. |
SIMPLE |
Ei toistuvia solmuja paitsi yhteinen aloitus- ja loppusolmu, eikä toistuvia reunoja | Haluat, ettei mikään solmu ilmesty useammin kuin kerran polun keskelle, mutta salli polut, jotka sulkeutuvat takaisin alkuun. Hyödyllistä silmukoiden havaitsemiseen. |
ACYCLIC |
Ei toistuvia solmuja tai kaaria | Sinun täytyy varmistaa, ettei mikään solmu ilmesty missään polulla useammin kuin kerran. Käyttöä tiukkoihin hierarkioihin, linjaan tai mihin tahansa kulkuun, jossa solmun uudelleenkäynti tuottaa virheellisiä tuloksia. |
WALK on sallivin ja ACYCLIC rajoittavin muoto.
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.
Eron havainnollistamiseksi tarkastellaan Alicen → Bobin → Carolin → Bobin polkua:
- KÄVELE — mahdollistaa tämän polun. Solmut ja reunat voivat toistua vapaasti.
- TRAIL — mahdollistaa tämän polun. Bob esiintyy kahdesti, mutta jokainen käytetty reuna on eri suhde (Alice→Bob ja Carol→Bob ovat erillisiä reunoja), joten reunaa ei toisteta.
- YKSINKERTAISTA — estää tämän tien. Bob esiintyy useammin kuin kerran, ja SIMPLE sallii solmun toistaa vain, jos se on sekä polun alku että loppu (suljettu sykli). Tässä Alice on aloitus ja Bob on loppu, joten poikkeus ei ole.
- ACYCLIC — estää tämän tien. Bob ilmestyy useammin kuin kerran missä tahansa polulla.
Seuraava esimerkki näyttää, miten TRAIL laskea, kuinka monta erilaista polkua johtaa ensimmäisiin 100 Alicen verkostoon saavutettavissa olevaan henkilöön neljän hypyn aikana:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
LET personId = dst.id
RETURN personId, dst.firstName, dst.lastName, count(*) AS pathCount
GROUP BY personId, dst.firstName, dst.lastName
ORDER BY pathCount DESC
LIMIT 100
Käytä ACYCLIC jopa 100 henkilöä, jotka ovat saavutettavissa Alicesta neljän hypyn sisällä, jolloin jokainen polun henkilö on ainutlaatuinen:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Oletusmatch-tila REPEATABLE ELEMENTS mahdollistaa särmän uudelleenkäytön erillisillä poluilla samassa graafikuviossa. Käyttö DIFFERENT EDGES tai DIFFERENT RELATIONSHIPS silloin, kun jokaisen reunojen sidonta kaikilla poluilla on oltava erilainen:
MATCH DIFFERENT EDGES
(p:Person)-[:knows]->(friend:Person),
(p)-[:knows]->(other:Person)
RETURN p.firstName, friend.firstName, other.firstName
LIMIT 100
Palauta yksi lyhin polku
ALL on oletuspolkuhaku ja palauttaa kaikki vastaavat polut. Käytä ANY SHORTEST palauttamaan yhden lyhimmän polun jokaiselle lähde-kohdeparille. Seuraava kysely löytää lyhimmän reitin Alicesta Bobiin:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}
(dst:Person WHERE dst.firstName = 'Bob')
RETURN p, path_length(p) AS hopCount
Kun useita lyhyimpiä polkuja tavoittaa, palautettava polku ei ole deterministinen.
ALL SHORTEST Ja ANY polkuhakuja ei tueta.
Predikaatin sijoittelu voi muuttaa tuloksen .ANY SHORTEST Inline-solmu- ja reunapredikaatit rajoittavat, mitkä polut ovat kelvollisia, kun taas jälkisuodatin voi poistaa valitun polun valitsematta pidempää polkua. Katso paikkapredikaatit ennen tai jälkeen polun valinnan.
Vinkki
Suosi rajallista ylärajaa ennustettavalle kyselykustannuksella. Rajoittamattomia ALL WALK kuvioita ei tueta. Rajoittamattomat kuviot , TRAILSIMPLE, tai ACYCLIC päättyvät elementtien ainutlaatuisuuden kautta, mutta voivat silti palauttaa monia polkuja. Rajoittamaton ANY SHORTEST WALK tukee vain tiettyjä kyselymuotoja. Katso Nykyiset rajoitukset.
Käytä muuttujan uudelleenkäyttöä jaettujen entiteettien ilmaisemiseen
Saman muuttujan uudelleenkäyttö kahdessa kuvion osassa luo implisiittisen yhtäläisyysrajoitteen – molempien viitteiden on vastattava samaa solmua. Tämä tekniikka antaa sinun ilmaista "löytää entiteettejä, jotka ovat yhteydessä yhteisen kolmannen olennon kautta."
Esimerkiksi löytääksesi jopa 100 paria ihmisiä, jotka tuntevat toisensa ja työskentelevät samassa yrityksessä:
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
Muuttujaa c käytetään uudelleen molemmille workAt kohteille, joten kysely palauttaa vain pareja, joissa molemmat tuntevat toisensa ja työskentelevät samassa yrityksessä.
Löytääksesi jopa 100 paria ihmisiä, jotka molemmat tykkäsivät samasta postauksesta:
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Vinkki
Ehto WHERE a.id < b.id estää kaksoisparien (Alice + Bob ja Bob + Alice) esiintymisen tuloksissa.
Yhdistä useita kuvioita
Listaa useita kuvioita yhdeksi MATCH, erotettu pilkuilla. Käytä muuttujaa uudelleen, kun kuvioiden täytyy sitoa sama graafielementti.
Esimerkiksi löytääksesi jopa 100 ihmistä sekä heidän työpaikkansa että asuinkaupunkinsa kanssa:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
Yhteinen muuttuja p yhdistää nämä kaksi kuviota. Jokainen tulosrivi edustaa yhtä henkilöä yrityksensä ja kaupunkinsa kanssa.
Irralliset kuviot ovat myös päteviä, mutta ne muodostavat karteesisen tulon osuuksistaan. Käytä niitä vain, kun tarvitset tarkoituksella kaikki yhdistelmät. Suorituskyvyn ohjeita varten katso Käytä jaettuja muuttujia tehokkaisiin liitoksiin.
Sovita valinnaisia suhteita
Käytä OPTIONAL MATCH tilannetta, jossa suhdetta ei välttämättä ole jokaiselle solmulle. Rivit ilman vastaavuutta säilytetään arvoilla NULL , kuten SQL LEFT JOIN:ssä.
Esimerkiksi palauta enintään 100 henkilöä yrityksen nimellä, mukaan lukien ne, joilla ei ole työnantajaa (eli jotka palaavat NULL yrityksen sarakkeeseen):
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
Käytä IS NULL 'after' OPTIONAL MATCH löytääksesi jopa 100 ihmistä, jotka eivät työskentele missään yrityksessä:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100