Kirjoita graafikuviokyselyitä Microsoft Fabric -ohjelmassa

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

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