Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Tato funkce je aktuálně ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Grafové vzory jsou základní stavební bloky dotazů GQL. Popisují struktury, které v grafu hledáte, pomocí uzlů a hran intuitivním vizuálním způsobem. Vzory grafů si můžete představit jako šablony, které se dotazovací modul pokusí shodovat se skutečnými daty v grafu.
Důležité
Tento článek výhradně používá datovou sadu grafů ze sociálních sítí.
Jednoduché vzory elementů
Jednoduché vzory prvků vám pomůžou spárovat jednotlivé uzly a hrany z grafu, které splňují konkrétní požadavky. Tyto vzory tvoří základ pro složitější porovnávání vzorů.
Jednoduché vzory uzlů
Vzor uzlu určuje popisky a vlastnosti, které musí uzel shodovat:
(:City { name: "New York" })
Tento vzor odpovídá všem uzlům, které mají jak, PlaceCity popisky (označené operátorem&) a jejichž name vlastnost se "New York"rovná . Tato specifikace požadovaných popisků a vlastností se nazývá výplň vzoru uzlu.
Klíčové koncepty:
-
Porovnávání popisků: Slouží
&k vyžadování více popisků. - Filtrování vlastností: Zadejte přesné hodnoty, které se musí shodovat s vlastnostmi.
- Flexibilní ("kovariantní") porovnávání: Spárované uzly můžou mít více popisků a vlastností nad rámec zadaných uzlů.
Poznámka:
Modely grafů s více štítky prvků zatím nejsou podporovány (známý problém).
Jednoduché vzory okrajů
Vzory okrajů jsou složitější než vzory uzlů. Zadávají nejen výplň, ale také připojují vzor zdrojového uzlu k vzoru cílového uzlu. Vzory edge popisují požadavky na hraniční i jeho koncové body:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
Směr -[...]-> šipky je důležitý – určuje (:Person) se jako vzor zdrojového uzlu a (:Comment) jako vzor cílového uzlu. Pochopení směru okrajů je zásadní pro správné dotazování grafu.
Ekvivalentní zrcadlený vzor:
Můžete překlopit šipku a prohodit vzory uzlů a vytvořit ekvivalentní zrcadlený okrajový vzor:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
Tento vzor najde stejné relace, ale z opačné perspektivy.
Vzory okrajů směrované na libovolnou hranici
Pokud směr okraje grafu nezáleží na dotazu, můžete ho nechat nezadanou vytvořením vzoru libovolného okraje:
(:Song)-[:inspired]-(:Movie)
Tento vzor odpovídá stejným okrajům jako (:Song)-[:inspired]->(:Movie) a (:Movie)-[:inspired]->(:Song) zkombinoval, bez ohledu na to, který uzel je zdrojem a který je cílem (tento příklad není typu grafu sociální sítě).
Klávesové zkratky vzorů grafu
GQL poskytuje praktické klávesové zkratky pro běžné vzory okrajů, aby byly dotazy stručnější:
-
()->()zkratka pro()-[]->()(směrovaná hrana s jakýmkoli popiskem) -
()<-()zkratka pro()<-[]-()(směrovaná hrana v obráceném směru s jakýmkoli popiskem) -
()-()zkratka pro()-[]-()(jakýkoli směrovaný okraj s jakýmkoli popiskem)
Tyto klávesové zkratky můžou být užitečné, když se zajímáte o připojení, ale ne o konkrétní typ okraje grafu.
Výrazy popisků
Vzory můžou vyjádřit složité požadavky na popisky odpovídajících uzlů a hran.
Example:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
Spočítá se počet isLocatedIn hran, které propojují Person uzly nebo Organizationuzly (ale ne)Company (které jsou vždy University uzly ve schématu sociální sítě) City nebo Country uzly.
Syntaxe:
| Syntaxe | Meaning |
|---|---|
A&B |
Popisky musí obsahovat A i B. |
A|B |
Popisky musí obsahovat alespoň jednu z A nebo B. |
!A |
Popisky musí vyloučit A. |
Kromě toho můžete použít závorky k řízení pořadí vyhodnocení výrazu popisku. Ve výchozím nastavení ! má nejvyšší prioritu a & má vyšší prioritu než |. Proto !A&B|C|!D je stejný jako ((!A)&B)|C|(!D).
Vazby proměnných
Proměnné umožňují odkazovat na odpovídající prvky grafu v jiných částech dotazu. Pochopení, jak svázat a používat proměnné, je nezbytné pro vytváření výkonných dotazů.
Proměnné vazby elementů
Vzory uzlů i okrajů můžou svázat odpovídající uzly a hrany s proměnnými pro pozdější použití.
(p:Person)-[w:workAt]->(c:Company)
V tomto vzoru p je vázán na odpovídající Person uzly, w na odpovídající workAt hrany a c na odpovídající Company uzly.
Opakované použití proměnné pro strukturální omezení:
Opakované použití stejné proměnné ve vzorci několikrát vyjadřuje omezení struktury shod. Každý výskyt stejné proměnné musí vždy svázat se stejným prvkem grafu v platné shodě. Opakované použití proměnných je výkonné pro vyjádření složitých strukturálních požadavků.
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Vzor najde uzly Person a x vzájemně se zná a pracují na stejném y, který je svázán s proměnnou Companyc . Opakované použití c zajišťuje, aby oba lidé pracovali ve stejné společnosti.
Predikáty vzorů s proměnnými elementů:
Proměnné elementů vazby umožňují určit predikáty uzlu a hraničního vzoru. Místo pouhého poskytnutí výplně s přesnými hodnotami vlastností, jako je { name: "New York, USA" }například , může vyplnit predikát, který se vyhodnotí pro každý kandidátský prvek. Vzor se shoduje pouze v případě, že se predikát vyhodnotí jako TRUE:
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
Vzor hrany najde lidi, kteří se navzájem znali od 1. ledna 2000, a používají flexibilní podmínku, nikoli přesnou shodu.
Poznámka:
Proměnné vzoru hrany se vždy sváže s jednotlivými hrany v predikátu vzoru hrany, i když používáte vzory s proměnlivou délkou. To může pomoct, když nebudete muset zrušit neoznamování proměnných seznamu hraničních skupin pro provedení následného filtru. Viz Vazby okrajových proměnných s délkou proměnné.
Pokročilé techniky predikátu vzorů:
Predikáty vzorů poskytují výkonné možnosti vložené filtrování, které můžou zlepšit čitelnost dotazů:
-- 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
Návod
Použití predikátů vzorů, pokud jsou podmínky vysoce selektivní, může snížit velikost zprostředkujících výsledků.
Vazby proměnných cest
Můžete také vytvořit vazbu odpovídající cesty k proměnné cesty pro další zpracování nebo vrácení celé struktury cesty uživateli:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
p Zde je vázána na hodnotu cesty představující úplnou odpovídající strukturu cesty, včetně referenčních hodnot pro všechny uzly a hrany v uvedeném pořadí.
Vázané cesty lze buď vrátit uživateli, nebo dále zpracovávat pomocí funkcí jako NODES nebo 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áření vzorů
Dotazy z reálného světa často vyžadují složitější vzory než jednoduché struktury uzlů na hraničních uzlech. GQL nabízí několik způsobů vytváření vzorů pro sofistikované procházení grafů.
Vytváření vzorů cest
Vzory cest se dají skládat zřetězením jednoduchých vzorů uzlů a okrajů, aby se vytvořily delší procházení.
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Vzor prochází od osoby prostřednictvím svých sociálních a profesionálních spojení a zjišťuje, kde se nachází společnost svého kolegy.
Konstrukce vzorů kusových vzorů: Vzory cest můžete také vytvářet přírůstkově, což usnadňuje čtení a pochopení složitých vzorů:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Tento přístup rozdělí stejnou procházení do logických kroků, což usnadňuje pochopení a ladění.
Vytváření nelineárních vzorů
Výsledný tvar vzoru nemusí být lineární cestou. Můžete se shodovat se složitějšími strukturami, jako jsou "hvězdicové" vzory, které vyzařují z centrálního uzlu:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
Vzor najde osobu společně se svým vzděláním, zaměstnáním a předvolbami obsahu najednou – komplexní dotaz na profil.
Stopy shody
Ve složitých vzorech je často nežádoucí procházet stejnou hranou několikrát. Opakované použití edge je důležité, když skutečný graf obsahuje cykly, které můžou vést k nekonečné nebo příliš dlouhé cestě. Graf v Microsoft Fabric TRAIL podporuje režim shody pro zpracování opakovaného použití hraničních zařízení.
Předpona vzoru cesty pomocí klíčového slova TRAIL zahodí všechny shody, které váže stejnou hranu několikrát:
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
Při použití TRAILvzor vytváří pouze shody, ve kterých se všechny hrany liší. Proto i v případě c = a , že cesta tvoří cyklus v dané shodě, e3 nikdy se neváže na stejnou hranu jako e1.
Režim TRAIL je nezbytný pro prevenci nekonečných smyček a zajištění toho, aby vaše dotazy vracely smysluplné a neuninutelné cesty.
Použití vzorů s proměnlivou délkou
Vzory s proměnlivou délkou jsou výkonné konstrukce, které umožňují najít cesty s různými délkami, aniž byste museli psát opakované specifikace vzorů. Jsou nezbytné pro procházení hierarchií, sociálních sítí a dalších struktur, kde není předem známa optimální délka cesty.
Ohraničené vzory s proměnlivou délkou
Důležité
Ohraničené vzory s proměnlivou délkou v současné době podporují pouze maximální horní mez 8. Přečtěte si článek o aktuálních omezeních.
Mnoho běžných grafových dotazů vyžaduje několikrát opakování stejného vzoru okrajů. Místo psaní podrobných vzorů, jako jsou:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
Můžete použít stručnější syntaxi s proměnnou délkou:
(:Person)-[:knows]->{3}(:Person)
Určuje {3} , že -[:knows]-> vzor hrany by se měl opakovat přesně třikrát.
Flexibilní rozsahy opakování: Pro větší flexibilitu můžete zadat dolní mez i horní mez opakování:
(:Person)-[:knows]->{1, 3}(:Person)
Tento vzor najde v jednom dotazu přímé přátele, přátele přátel a přátele přátel přátel.
Poznámka:
Dolní mez může být 0také . V tomto případě se neshodují žádné hrany a celý vzor se shoduje pouze v případě, že dva vzory uzlů koncového bodu odpovídají stejnému uzlu.
Příklad:
(p1:Person)-[r:knows WHERE NOT p1=p2]->{0,1}(p2:Person)
Tento vzorec páruje páry různých osob, které se znají, ale zároveň shoduje stejnou osobu s oběma p1p2 – i když ta osoba sama sebe "nezná".
Pokud není zadána žádná dolní mez, obvykle je výchozí hodnota 0 (nula).
Komplexní kompozice proměnné délky: Vzory s proměnnou délkou mohou být součástí větších, složitějších vzorů, jak je uvedeno v následujícím dotazu:
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 najde dvojice komentářů, ve kterých se lidé, kteří se navzájem znají, různé komentáře a tyto komentáře jsou propojené prostřednictvím řetězů odpovědí o 1 až 5 úrovních.
Vytvoření vazby okrajových proměnných na délku proměnné
Když svážete vzor hrany s proměnlivou délkou, změní se hodnota a typ hraniční proměnné v závislosti na kontextu odkazu. Pochopení tohoto chování je zásadní pro správné zpracování shody s proměnlivou délkou:
Dva stupně odkazu:
- Uvnitř vzoru proměnné délky: Hraniční proměnné grafu se sváže s jednotlivými hrany podél odpovídající cesty (označované také jako "singleton degree of reference")
- Vnější vzor proměnné délky: Hraniční proměnné grafu se sváže se sekvencí všech okrajů podél odpovídající cesty (označované také jako "skupinový stupeň odkazu")
Příklad demonstrující oba kontexty:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
Vyhodnocení hraniční proměnné e probíhá ve dvou kontextech:
MATCHV příkazu: Dotaz najde řetězy přátel přátel-přátel-z-přátel, kde každé přátelství bylo vytvořeno od roku 2000. Během porovnávání vzorů se predikáte.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")vzorku hrany vyhodnocuje jednou pro každý kandidátský okraj. V tomto kontextueje vázán na jednu hraniční referenční hodnotu.RETURNV příkazu: Tadyeje vázán na seznam (skupina) hraničních referenčních hodnot v pořadí, v jakém se vyskytují v odpovídajícím řetězci. Výsledkeme[0]je první hraniční referenční hodnota v každém shodném řetězci.
Proměnné délky vzorových hran v horizontální agregaci:
Hranové proměnné omezené porovnáním vzorů s proměnnou délkou jsou skupinové seznamy mimo vzor proměnné délky, a proto je lze použít v horizontální agregaci.
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
Podrobnosti najdete v sekci o horizontální agregaci.