Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Vzory grafu sú základnými stavebnými prvkami vašich dotazov GQL v grafe v službe Microsoft Fabric. Popisujú štruktúry, ktoré v grafe hľadáte, pomocou uzlov a okrajov intuitívnym vizuálnym spôsobom. Predstavte si vzory grafov ako šablóny, ktoré sa nástroj dotazov snaží prispôsobiť skutočným údajom v grafe.
Tento článok vysvetľuje pravidlá syntaxe a zloženia pre grafové vzory v GQL.
Dôležité
Tento článok výhradne používa príkladovú dátovú sadu grafov sociálnych sietí.
Jednoduché vzory prvkov
Jednoduché vzory prvkov pomáhajú zodpovedať jednotlivým uzlom a okrajom z grafu, ktoré spĺňajú konkrétne požiadavky. Tieto vzory tvoria základ pre zložitejšie zhody vzorov.
Jednoduché vzory uzla
Vzor uzla určuje označenia a vlastnosti, ktoré sa musia v uzle zhodovať:
(:City { name: "New York" })
Tento vzor zodpovedá všetkým uzlom, ktoré majúPlace označenia a City (označené operátorom & ) a ktorých name vlastnosť sa rovná "New York". Táto kombinácia povinných označení a vlastností sa nazýva výplň vzoru uzla.
Kľúčové koncepty:
-
Zhodné označenie: Používa sa
&na vyžadovanie viacerých označení. - Filtrovanie vlastností: zadajte presné hodnoty, ktoré sa musia zhodovať s vlastnosťami.
- Flexibilné ("kovariančné") zhodné: Zhodné uzly môžu mať viac označení a vlastností nad rámec tých zadaných.
Poznámka
Uzly môžu mať viacero označení, ale okrajové typy s viacerými označeniami zatiaľ nie sú podporované.
Jednoduché hrany vzory
Vzory okrajov sú zložitejšie ako vzory uzla. Nielenže špecifikujú výplň, ale tiež spájajú vzor pôvodného uzla s vzorom cieľového uzla. Vzory okrajov popisujú požiadavky na okraji aj v jeho koncových bodoch:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
Smer -[...]-> šípky je dôležitý – určuje (:Person) ako vzor počiatočného uzla a (:Comment) ako vzor cieľového uzla. Porozumenie smeru okrajov je rozhodujúce pre správne dotazovanie grafu.
Ekvivalentný zrkadlený vzor:
Môžete prevrátiť šípku a vymeniť vzory uzla a vytvoriť ekvivalentný, zrkadlený vzor okraja:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
Tento vzor nájde rovnaké vzťahy, ale z opačnej perspektívy.
Všetky smerované vzory okrajov
Keď smer hranu grafu nezáleží na dotaze, môžete ho nechať nezadané vytvorením vzoru každého smerovaného okraja:
(:Song)-[:inspired]-(:Movie)
Tento vzor zodpovedá rovnakým hranám ako (:Song)-[:inspired]->(:Movie) a (:Movie)-[:inspired]->(:Song) kombinovane, bez ohľadu na to, ktorý uzol je pôvodom a ktorý je cieľom (tento príklad nie je z typu grafu sociálnej siete).
Odkazy na vzory okrajov grafu
Jazyk GQL poskytuje pohodlné skratky pre bežné okrajové vzory, aby boli dotazy stručnejšie:
-
()->()je skratka pre()-[]->()(smerovaný okraj s ľubovoľným označením) -
()<-()je skratka pre()<-[]-()(smerovaný okraj v opačnom poradí s ľubovoľným označením) -
()-()je skratka pre()-[]-()(ľubovoľný smerovaný okraj s ľubovoľným označením)
Tieto skratky môžu byť užitočné, keď vám záleží na pripojení, ale nie na konkrétnom type grafu.
Výrazy označenia
Vzory môžu vyjadriť zložité požiadavky na označenia zhodných uzlov a okrajov.
Príklad:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
Vypočíta počet isLocatedIn okrajov, ktoré sa pripájajú Person uzly alebo Organizationuzly -ale-not-Company (ktoré sú vždy University uzly v schéme sociálnej siete) alebo CityCountry uzly.
Syntax:
| Syntax | Význam |
|---|---|
A&B |
Označenia musia obsahovať A aj B. |
A\|B |
Označenia musia obsahovať aspoň jednu z A alebo B. |
!A |
Označenia musia vylúčiť A. |
Okrem toho môžete pomocou zátvorky ovládať poradie vyhodnocovania výrazov označenia. Predvolene ! má najvyššiu prioritu a & má vyššiu prioritu ako |. Preto !A&B|C|!D je rovnaký ako ((!A)&B)|C|(!D).
Premenné väzby
Premenné vám umožňujú odkazovať na zhodné prvky grafu v iných častiach dotazu. Informácie o tom, ako naviazať a používať premenné, sú nevyhnutné na vytváranie výkonných dotazov.
Premenné prvku väzby
Vzory uzlov aj okrajov môžu naviazať zhodné uzly a okraje na premenné pre neskoršie odkazovanie.
(p:Person)-[w:workAt]->(c:Company)
V tomto vzore p sa viaže na zodpovedajúce Person uzly, w zodpovedajúce workAt okraje a c zodpovedajúce Company uzly.
Opätovné použitie premennej pre štrukturálne obmedzenia:
Opätovné opätovné využívanie rovnakej premennej vzorom viackrát vyjadruje obmedzenie štruktúry zhôd. Každý výskyt rovnakej premennej musí vždy naviazať na rovnaký prvok grafu v platnej zhode. Premenlivé opätovné použitie je výkonné na vyjadrenie zložitých štrukturálnych požiadaviek.
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Vzor nájde uzlyPerson, x ktoré sa navzájom poznajú a fungujú na rovnakom ymieste , ktoré je viazané na premennú Companyc . Opätovné použitie zaisťuje, že obaja c ľudia pracujú v tej istej spoločnosti.
Vzorové predikáty s premennými prvku:
Premenné prvku väzby umožňujú zadať uzly a okrajové vzorové predikáty. Namiesto toho, aby ste zadali výplň s presnými hodnotami vlastností, ako je { name: "New York, USA" }napríklad výplň, môžete určiť predikát, ktorý sa vyhodnotí pre každý prvok kandidáta. Vzor sa zhoduje len vtedy, ak sa predikát vyhodnotí ako TRUE:
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
Okraj vzor nájde ľudí, ktorí sa poznali od januára 1, 2000, pomocou pružnej podmienky, skôr než presná zhoda.
Poznámka
Premenné vzorov okrajov sú vždy naviazané na jednotlivý okraj v predikáte okrajového vzoru, a to aj pri použití vzorov s premenlivou dĺžkou. Môže to pomôcť tým, že nebudete musieť na unnestovať premenné zoznamu skupín okrajov, aby ste mohli vykonať post-filter. Pozrite si tému Naviazať premenné vzoru s premenlivou dĺžkou.
Pokročilé techniky predikátov vzorov:
Vzorové predikáty poskytujú výkonné možnosti vnoreného filtrovania, ktoré dokážu zlepšiť čitateľnosť dotazov:
-- 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
Prepitné
Použitím vzorových predikátov, ak sú podmienky vysoko selektívne, sa môže znížiť veľkosť medzikrokových výsledkov.
Premenné cesty väzby
Tiež môžete naviazať zladenú cestu k premennej cesty na ďalšie spracovanie alebo vrátiť používateľovi úplnú štruktúru cesty:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
p Tu je viazaná na hodnotu cesty predstavujúcu úplnú zladenú štruktúru cesty vrátane referenčných hodnôt pre všetky uzly a okraje v danom poradí.
Viazané cesty môžu byť buď vrátené používateľovi, alebo ďalej spracované pomocou funkcií ako NODES alebo 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
Vytváranie vzorov
Dotazy z reálneho sveta často vyžadujú zložitejšie vzory ako jednoduché štruktúry uzla s okrajmi uzla. GQL poskytuje niekoľko spôsobov, ako vytvárať vzory pre sofistikované prechádzanie grafov.
Vytváranie vzorov ciest
Vzory cesty možno zostaviť zreťazením jednoduchých uzál a vzorov okrajov, aby sa vytvorili dlhšie prechádzanie.
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Vzor prechádza od osoby prostredníctvom ich sociálnych a profesionálnych pripojení, aby zistil, kde sa nachádza spoločnosť jej kolegu.
Konštrukcia posuvnej vzorky: Vzory ciest môžete vytvárať aj prírastkovo, vďaka čomu sa zložité vzory ľahšie čítajú a pochopia:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Tento prístup rozdeľuje rovnaké prechádzanie na logické kroky, vďaka čomu je jednoduchšie porozumieť a ladiť.
Tvorba nelineárnych vzorov
Výsledný tvar vzoru nemusí byť lineárna cesta. Môžete sa zhodovať so zložitejšími štruktúrami, ako sú vzory v tvare hviezdy, ktoré vyžarujú z centrálneho uzla:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
Vzor nájde osobu spolu s jej vzdelávaním, zamestnaním a obsahovými preferenciami naraz – komplexný dotaz na profil.
Priradiť stopy
V zložitých vzoroch je často nežiaduce prechádzať rovnakým okrajom viackrát. Opätovné použitie cez Microsoft Edge je dôležité vtedy, keď skutočný graf obsahuje cykly, ktoré môžu viesť k nekonečným alebo príliš dlhým cestám. Na spracovanie krajného opätovného použitia podporuje graf režim zhody TRAIL .
Predponou vzor cesty pomocou kľúčového slova TRAIL sa zahodí všetky zhody, ktoré viackrát viažu rovnaký okraj:
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
Pomocou vzoru TRAILsa vytvorí len zhoda, v ktorej sa líšia všetky okraje. Preto aj v c = a prípade, že cesta vytvorí cyklus v danej zhode, e3 nikdy sa viaže na rovnaký okraj ako e1.
Režim TRAIL je nevyhnutný na to, aby sa zabránilo nekonečným slučkám, a aby dotazy vracali zmysluplné a nepreddávené cesty.
Používanie vzorov s premenlivou dĺžkou
Vzory s premenlivou dĺžkou sú výkonné konštrukcie, ktoré vám umožňujú nájsť cesty s rôznymi dĺžkami bez písania opakujúcich sa špecifikácií vzorov. Sú nevyhnutné na prechádzanie hierarchiami, sociálnymi sieťami a inými štruktúrami, kde nie je optimálna dĺžka cesty vopred známa.
Ohraničené vzory s premenlivou dĺžkou
Dôležité
Ohraničené vzory s premenlivou dĺžkou aktuálne podporujú len maximálnu hornú hranicu 8. Pozrite si článok o aktuálnych obmedzeniach.
Množstvo bežných dotazov v grafe vyžaduje viackrát opakovanie rovnakého hranu. Namiesto písania podrobných vzorov, ako sú:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
Môžete použiť stručnejšiu syntax s premenlivou dĺžkou:
(:Person)-[:knows]->{3}(:Person)
Hodnota {3} určuje, že -[:knows]-> sa má vzor okraja zopakovať presne trikrát.
Flexibilné rozsahy opakovania: Ak potrebujete väčšiu flexibilitu, môžete určiť dolnú väzbu aj hornú hranicu opakovania:
(:Person)-[:knows]->{1, 3}(:Person)
Tento vzor nájde priamych priateľov, priateľov-z-priatelia a priatelia-z-priatelia-z-priatelia všetci v jednom dotaze.
Poznámka
Dolná hranica môže byť 0tiež . V tomto prípade sa nezhodujú žiadne okraje a celý vzor sa zhoduje iba vtedy a len vtedy, ak sa vzory uzla koncového bodu zhodujú s rovnakým uzlom.
Príklad:
(p1:Person)-[r:knows WHERE NOT p1=p2]->{0,1}(p2:Person)
Tento vzorec spája páry rôznych osôb, ktoré sa poznajú , ale zároveň zhoduje tú istú osobu s oboma p1 a – p2 aj keď tá osoba sama seba "nepozná".
Ak nie je zadaná žiadna dolná hranica, vo všeobecnosti sa vo všeobecnosti nastaví na 0 (nula).
Komplexné kompozície s premenlivou dĺžkou: Vzory s premenlivou dĺžkou môžu byť súčasťou väčších, zložitejších vzorov, ako je uvedené v nasledujúcom dotaze:
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
Vzor nájde páry komentárov, kde sa ľudia, ktorí sa navzájom poznajú, páčia rôzne komentáre, a tieto komentáre sú prepojené prostredníctvom odpovedí reťazcov 1 až 5 úrovní každý.
Naviazať premenné vzoru s premenlivou dĺžkou
Keď naviažete vzor okraja s premenlivou dĺžkou, hodnota a typ premennej okraja sa menia v závislosti od referenčného kontextu. Pochopenie tohto správania je rozhodujúce pre správne spracovanie zhody s premenlivou dĺžkou:
Dva stupne odkazu:
- Vnútri vzoru s premenlivou dĺžkou: Premenné okrajov grafu sa viažu na každý jednotlivý okraj pozdĺž zladenej cesty (označuje sa aj ako "singleton degree of reference")
- Mimo vzor s premenlivou dĺžkou: Premenné okrajov grafu sa viažu na postupnosť všetkých okrajov pozdĺž zhodnej cesty (nazýva sa aj "skupinový stupeň odkazu")
Príklad použitia oboch kontextov:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
Vyhodnotenie okrajovej premennej e prebieha v dvoch kontextoch:
MATCHVo vyhlásení: Dotaz nájde reťazce priateľov-z-priatelia-z-priatelia, kde každé priateľstvo bolo zriadené od roku 2000. Počas zhody vzorov sa predikáte.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")okrajov vyhodnotí raz pre každý okraj kandidáta. V tomto kontexteeje naviazaná na referenčnú hodnotu s jedným okrajom.V príkaze
RETURN: Tuesa viaže na zoznam (skupiny) referenčných hodnôt okrajov v poradí, v akom sa vyskytujú v zhodnom reťazci. Výsledkome[0]je prvá referenčná hodnota okraja v každej zhodnej reťazci.
Premenné hran vzoru s premennou dĺžkou v horizontálnej agregácii:
Hranové premenné viazané porovnávaním vzorov s premenlivou dĺžkou sú skupinové zoznamy mimo vzoru s premennou dĺžkou, a preto môžu byť použité v horizontálnej agregácii.
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
Ďalšie informácie nájdete v téme Vodorovná agregácia.