Megosztás:


GQL-gráfminták

Megjegyzés:

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információkért lásd: Microsoft Azure Previews Kiegészítő Felhasználási Feltételek.

A gráfminták a GQL-lekérdezések alapvető építőelemei. A gráfban keresett struktúrákat csomópontok és élek használatával, intuitív, vizuális módon írják le. A gráfmintákat olyan sablonoknak tekintheti, amelyeket a lekérdezési motor megpróbál egyeztetni a gráf tényleges adataival.

Fontos

Ez a cikk kizárólag a közösségi hálózati példa gráfdatasetet használja.

Egyszerű elemminták

Az egyszerű elemminták segítenek a gráf egyes csomópontjaihoz és éleihez igazodni, amelyek megfelelnek az adott követelményeknek. Ezek a minták képezik az összetettebb mintaegyezés alapjait.

Egyszerű csomópontminták

A csomópontminta megadja azokat a címkéket és tulajdonságokat, amelyeknek egy csomópontnak meg kell egyeznie:

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

Ez a minta megegyezik az összes olyan csomóponttal, amelynek a címkéje és a Place címkéje City (az & operátor jelzi), és amelynek name a tulajdonsága megegyezik"New York". A szükséges címkék és tulajdonságok specifikációját a csomópontminta kitöltőjének nevezzük.

Főbb fogalmak:

  • Címkeegyezés: Több címke megkövetelésére használható & .
  • Tulajdonságszűrés: Adja meg azokat a pontos értékeket, amelyeknek meg kell egyeznie a tulajdonságoknak.
  • Rugalmas ("kovariant") egyeztetés: A egyeztetett csomópontok több címkével és tulajdonsággal rendelkezhetnek a megadottakon túl.

Megjegyzés:

A több elemes címkével rendelkező gráfmodellek még nem támogatottak (ismert probléma).

Egyszerű élminták

Az élminták összetettebbek, mint a csomópontminták. Nem csak kitöltőt adnak meg, hanem egy forráscsomópont-mintát is csatlakoztatnak egy célcsomópont-mintához. Az élminták a peremhálózatra és a végpontokra vonatkozó követelményeket írják le:

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

A nyíl iránya -[...]-> fontos – a forráscsomópont mintájaként és (:Person) a célcsomópont (:Comment) mintájaként határozza meg. A peremhálózat irányának megértése elengedhetetlen a gráf helyes lekérdezéséhez.

Egyenértékű tükrözött minta:

Megfordíthatja a nyilat, és felcserélheti a csomópontmintákat az egyenértékű tükrözött élminta létrehozásához:

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

Ez a minta ugyanazokat a kapcsolatokat keresi, de az ellenkező szemszögből.

Bármilyen irányban irányított élminták

Ha egy gráf szélének iránya nem számít a lekérdezésnek, meghatározatlan marad egy tetszőleges irányított élminta létrehozásával:

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

Ez a minta megegyezik azokkal az élekkel, mint (:Song)-[:inspired]->(:Movie) a forrás és (:Movie)-[:inspired]->(:Song) a célhely (ez a példa nem a közösségi hálózat gráftípusából származik).

Gráfszél mintázatának billentyűparancsai

A GQL kényelmes billentyűparancsokat biztosít a gyakori élmintákhoz, hogy a lekérdezések tömörebbek legyenek:

  • ()->() ()-[]->() jelentése (irányított él bármilyen címkével)
  • ()<-() ()<-[]-() jelentése (fordított él bármely címkével)
  • ()-() ()-[]-() jelentése (bármilyen irányított él bármilyen címkével)

Ezek a billentyűparancsok akkor lehetnek hasznosak, ha fontos a kapcsolat, de nem az adott gráféltípus.

Címkekifejezések

A minták összetett követelményeket fejezhetnek ki a megfeleltethető csomópontok és élek címkéjén.

Example:

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

Ez megszámolja a csomópontokat isLocatedIn vagy Person-, de-nem csomópontokatOrganization összekötő élek számát Company (amelyek mindig University a közösségi hálózati séma csomópontjai) City vagy Country csomópontokhoz.

Szintaxis:

Szemantika Meaning
A&B A címkéknek A-t és B-t is tartalmazniuk kell.
A|B A címkéknek tartalmazniuk kell legalább egy A-t vagy B-t.
!A A címkéknek ki kell zárniuk az A-t.

Emellett zárójel használatával szabályozhatja a címkekifejezések kiértékelésének sorrendjét. Alapértelmezés szerint a legmagasabb prioritással rendelkezik, ! és & magasabb prioritással rendelkezik, mint |a . Ezért !A&B|C|!D ugyanaz, mint ((!A)&B)|C|(!D)a .

Kötési változók

A változók lehetővé teszik, hogy a lekérdezés más részeiben egyező gráfelemekre hivatkozzon. A változók kötésének és használatának megértése elengedhetetlen a hatékony lekérdezések létrehozásához.

Kötéselem változói

A csomópont- és élminták egyaránt köthetik a megfelelt csomópontokat és éleket a változókhoz későbbi referenciaként.

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

Ebben a mintában az egyező p csomópontokhoz, Personw az egyező workAt élekhez és c az egyező Company csomópontokhoz van kötve.

Változók újrafelhasználása szerkezeti korlátozások esetén:

Ha ugyanazt a változót többször használja újra egy mintában, az korlátozza az egyezések szerkezetét. Ugyanazon változó minden előfordulásának mindig ugyanahhoz a gráfelemhez kell kapcsolódnia egy érvényes egyezésben. A változók újrafelhasználása hatékony az összetett szerkezeti követelmények kifejezéséhez.

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

A minta megkeresi Person a csomópontokat x , és y ismerik egymást, és ugyanazon Companydolgoznak , ami a változóhoz cvan kötve. Az újbóli használat c biztosítja, hogy mindkét személy ugyanabban a vállalatban dolgozik.

Minta predikátumok elemváltozókkal:

A kötéselem változói lehetővé teszik csomópont- és élminta-predikátumok megadását. Ahelyett, hogy egy kitöltőt adna meg pontos tulajdonságértékekkel, például { name: "New York, USA" }, a kitöltő megadhat egy predikátumot, amelyet az egyes jelölt elemek kiértékelnek. A minta csak akkor egyezik, ha a predikátum a következőt TRUEértékeli ki:

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

A peremhálózati minta 2000. január 1. óta olyan embereket keres, akik ismerték egymást, és nem pontos egyezést, hanem rugalmas feltételt használnak.

Megjegyzés:

Az élminta változói mindig az élmintában lévő egyes élhez kötődnek, még akkor is, ha változó hosszúságú mintázatokat használnak. Ez segíthet abban, hogy a szűrő utáni szűréshez ne kelljen leépítenie az élcsoportlista változóit. Lásd : Kötés változóhosszúságú minta élváltozói.

Speciális minta predikátum technikák:

A minta predikátumok hatékony beágyazott szűrési képességeket biztosítanak, amelyek javítják a lekérdezések olvashatóságát:

-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.age > 30 AND p.department = 'Engineering')
      -[:workAt]->
      (c:Company WHERE c.revenue > 1000000 AND c.location = 'Seattle')

-- Complex edge predicates with calculations
MATCH (p1:Person)-[w:workAt WHERE w.start_date < ZONED_DATETIME('2020-01-01T00:00:00Z') 
                              AND w.salary > 75000]-(c:Company)

-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.active = TRUE AND c.public = TRUE

-- Filter during matching and after
MATCH (p:Person WHERE p.department = 'Sales')-[:workAt]->(c:Company)
WHERE p.quota_achievement > 1.2 AND c.revenue > c.revenue_target

Jótanács

A minta predikátumok használata, ha a feltételek nagyon szelektívek, csökkenthetik a köztes eredmények méretét.

Kötési útvonal változói

A megfeleltetett elérési utat egy elérésiút-változóhoz is kötheti további feldolgozás céljából, vagy visszaadhatja a teljes elérésiút-struktúrát a felhasználónak:

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

Itt egy elérésiút-értékhez van kötve, p amely a teljes megfeleltethető elérésiút-struktúrát jelöli, beleértve a megadott sorrendben lévő összes csomópont és él referenciaértékeit is.

A kötött utak vissza lehet juttatni a felhasználóhoz, vagy tovább feldolgozni olyan funkciókkal, mint NODES például: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

Összeállítási minták

A valós lekérdezések gyakran összetettebb mintákat igényelnek, mint az egyszerű csomópont-él-csomópont struktúrák. A GQL számos módszert kínál a kifinomult gráfbejárások mintáinak összeállítására.

Elérésiút-minták összeállítása

Az útvonalminták egyszerű csomópont- és élminták összefűzésével hosszabb bejárásokat hozhatnak létre.

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

A minta áthalad egy személytől a társadalmi és szakmai kapcsolatain keresztül, hogy megtalálja a munkatársa vállalatának helyét.

Darabos mintaszerkezet: Az elérésiút-mintákat növekményesen is létrehozhatja, ami megkönnyíti az összetett minták olvasását és megértését:

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

Ez a megközelítés ugyanazokat a bejárásokat logikai lépésekre bontja, így könnyebben érthető és hibakeresési műveleteket végezhet.

Nemlineáris minták írása

A minta eredményének nem kell lineáris útnak lennie. Összetettebb struktúrákat, például a központi csomópontból kisugárzott "csillag alakú" mintákat is megfeleltetheti:

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

A minta egyszerre keres egy személyt az oktatással, a foglalkoztatással és a tartalommal kapcsolatos preferenciákkal együtt – egy átfogó profil-lekérdezést.

Nyomvonalak egyeztetése

Összetett minták esetén gyakran nem kívánatos ugyanazon a peremen többször is áthaladni. Az él újrafelhasználása akkor válik fontossá, ha a tényleges gráf olyan ciklusokat tartalmaz, amelyek végtelen vagy túl hosszú útvonalakhoz vezethetnek. A peremhálózatok újbóli felhasználásának kezeléséhez a Microsoft Fabric gráfja támogatja az egyeztetési TRAIL módot.

A kulcsszóval TRAIL rendelkező elérésiút-minta előtagja elveti azokat az egyezéseket, amelyek többször kötik ugyanazt az élet:

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

A használatával TRAILa minta csak olyan egyezéseket hoz létre, amelyekben az összes él eltérő. Ezért még akkor sem, ha c = a az elérési út egy adott egyezésben ciklust alkot, soha nem kapcsolódik ugyanahhoz a szélhez, e3 mint e1a .

A TRAIL mód elengedhetetlen a végtelen ciklusok megelőzéséhez, és annak biztosításához, hogy a lekérdezések értelmes, nem közönyös útvonalakat adjanak vissza.

Változó hosszúságú minták használata

A változó hosszúságú minták olyan hatékony szerkezetek, amelyek lehetővé teszik a különböző hosszúságú útvonalak megtalálását anélkül, hogy ismétlődő mintaleírásokat írnál. Nélkülözhetetlenek a hierarchiák, a közösségi hálózatok és más struktúrák bejárásához, ahol az optimális elérési út hossza előre nem ismert.

Határolt változóhosszúságú minták

Fontos

A határolt változóhosszúságú minták jelenleg csak a 8-ás felső határt támogatják. Tekintse meg az aktuális korlátozásokról szóló cikket.

Sok gyakori gráf-lekérdezéshez ugyanazt az élmintát többször kell megismételni. Ahelyett, hogy részletes mintákat írnék, például:

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

A tömörebb változóhossz szintaxist használhatja:

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

A {3} beállítás azt határozza meg, hogy az -[:knows]-> élmintát pontosan háromszor kell megismételni.

Rugalmas ismétlési tartományok: A nagyobb rugalmasság érdekében megadhat alsó és felső határt is az ismétléshez:

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

Ez a minta egyetlen lekérdezésben találja meg a közvetlen barátokat, a barátok barátait és a barátok barátait.

Megjegyzés:

Az alsó határ is lehet 0. Ebben az esetben a rendszer nem egyezteti a szegélyeket, és a teljes minta csak akkor és csak akkor egyezik meg, ha a két végpontcsomópont-minta megegyezik ugyanahhoz a csomóponthoz.

Példa:

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

Ez a minta páros, egymást ismerő személy párjait is összeegyezteti –p1p2 még akkor is, ha az illető nem "ismeri" magát.

Ha nincs megadva alsó korlát, az alapértelmezés szerint 0 (nulla).

Komplex változó hosszúságú kompozíciók: A változó hosszúságú minták lehetnek nagyobb, összetettebb minták részei, mint az alábbi lekérdezésben:

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

A minta olyan megjegyzéspárokat talál, amelyekben az egymást ismerő személyek különböző megjegyzéseket szerettek, és ezek a megjegyzések 1-5 szintű válaszláncokon keresztül kapcsolódnak egymáshoz.

Változóhosszúságú minta élváltozóinak kötése

Változó hosszúságú élminta kötésekor az élváltozó értéke és típusa a referenciakörnyezettől függően változik. Ennek a viselkedésnek a megértése elengedhetetlen a változóhosszúságú egyezések helyes feldolgozásához:

Két referenciafok:

  • Változóhosszúságú mintán belül: A gráf élváltozói minden egyes élhez kötődnek a megfeleltetési útvonal mentén (más néven "egyszeri referenciafokú")
  • Változóhosszúságú mintán kívül: A gráf élváltozói a megfeleltetett elérési út mentén lévő összes él sorozatához kötődnek (más néven "csoportfokú referencia")

Példa mindkét környezet bemutatására:

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

Az élváltozó e kiértékelése két környezetben történik:

  • MATCH Az állításban: A lekérdezés megkeresi a barátok láncait, ahol minden barátságot 2000 óta hoztak létre. A mintaegyeztetés során az élminta predikátumát e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z") a rendszer minden egyes jelölt élhez egyszer kiértékeli. Ebben a kontextusban e egyetlen peremhálózati hivatkozási értékhez van kötve.

  • RETURN Az utasításban: Itt e a peremhálózati referenciaértékek (csoport) listájához van kötve a megfeleltetett láncban előforduló sorrendben. Ennek eredménye e[0] az egyes megfeleltetett láncok első élhivatkozási értéke.

Változó hosszúságú mintaél élváltozók vízszintes aggregációban:

A változó hosszúságú mintázatpárosítással kötött élváltozók csoportlisták, amelyek a változó hosszúságú mintán kívül vannak, így vízszintes aggregációban használhatók.

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

További részletekért lásd a vízszintes aggregációról szóló szakaszt.