Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą nie być obsługiwane lub mogą mieć ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Warunki dodatkowe korzystania z testowych wersji Microsoft Azure.
Wzorce grafu to podstawowe bloki konstrukcyjne zapytań GQL. Opisują struktury, których szukasz na grafie przy użyciu węzłów i krawędzi w intuicyjny, wizualny sposób. Wzorce grafu można traktować jako szablony, które aparat zapytań próbuje dopasować do rzeczywistych danych na wykresie.
Ważne
Artykuł ten wykorzystuje wyłącznie przykładowy zbiór grafów sieci społecznościowych.
Proste wzorce elementów
Proste wzorce elementów pomagają dopasować poszczególne węzły i krawędzie z grafu, które spełniają określone wymagania. Te wzorce stanowią podstawę bardziej złożonego dopasowywania wzorców.
Proste wzorce węzłów
Wzorzec węzła określa etykiety i właściwości, które węzeł musi być zgodny:
(:City { name: "New York" })
Ten wzorzec pasuje do wszystkich węzłów, które mają etykietyPlace i ( City wskazywane przez & operatora) i których name właściwość jest "New York"równa . Ta specyfikacja wymaganych etykiet i właściwości jest nazywana wypełnieniem wzorca węzła.
Kluczowe pojęcia:
-
Dopasowywanie etykiet: użyj polecenia
&, aby wymagać wielu etykiet. - Filtrowanie właściwości: określ dokładne wartości, które właściwości muszą być zgodne.
- Dopasowanie elastyczne ("kowariantne") : dopasowane węzły mogą mieć więcej etykiet i właściwości poza określonymi.
Uwaga / Notatka
Modele grafów z wieloma etykietami elementów nie są jeszcze obsługiwane (znany problem).
Proste wzorce krawędzi
Wzorce krawędzi są bardziej złożone niż wzorce węzłów. Nie tylko określają wypełnienie, ale także łączą wzorzec węzła źródłowego ze wzorcem węzła docelowego. Wzorce krawędzi opisują wymagania dotyczące krawędzi i jej punktów końcowych:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
Kierunek -[...]-> strzałki jest ważny — określa (:Person) jako wzorzec węzła źródłowego i (:Comment) jako wzorzec węzła docelowego. Zrozumienie kierunku krawędzi ma kluczowe znaczenie dla poprawnego wykonywania zapytań względem grafu.
Równoważny wzorzec dublowany:
Możesz przerzucić strzałkę i zamienić wzorce węzłów w celu utworzenia równoważnego, dublowanego wzorca krawędzi:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
Ten wzorzec znajduje te same relacje, ale z odwrotnej perspektywy.
Wzorce krawędzi dowolnego skierowanego
Gdy kierunek krawędzi grafu nie ma znaczenia dla zapytania, możesz pozostawić go nieokreślony, tworząc wzorzec krawędzi skierowanych do dowolnego:
(:Song)-[:inspired]-(:Movie)
Ten wzorzec pasuje do tych samych krawędzi co (:Song)-[:inspired]->(:Movie) i (:Movie)-[:inspired]->(:Song) połączone, niezależnie od tego, który węzeł jest źródłem i który jest miejscem docelowym (ten przykład nie pochodzi z typu grafu sieci społecznościowej).
Skróty do wzorca krawędzi grafu
GQL udostępnia wygodne skróty dla typowych wzorców krawędzi, aby zapytania bardziej zwięzłe:
-
()->()()-[]->()oznacza (krawędź skierowana z dowolną etykietą) -
()<-()()<-[]-()oznacza (krawędź skierowana odwrotnie z dowolną etykietą) -
()-()()-[]-()oznacza (dowolna krawędź skierowana z dowolną etykietą)
Te skróty mogą być przydatne, gdy dbasz o łączność, ale nie o konkretny typ krawędzi grafu.
Wyrażenia etykiet
Wzorce mogą wyrażać złożone wymagania dotyczące etykiet dopasowanych węzłów i krawędzi.
Example:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
Zlicza to liczbę isLocatedIn krawędzi łączących Person węzły lub Organizationwęzły (Company które są zawsze University węzłami w schemacie sieci społecznościowej) z City węzłami lub Country węzłami.
Składnia:
| Składnia | Meaning |
|---|---|
A&B |
Etykiety muszą zawierać zarówno A, jak i B. |
A|B |
Etykiety muszą zawierać co najmniej jedną z etykiet A lub B. |
!A |
Etykiety muszą wykluczać A. |
Ponadto użyj nawiasu, aby kontrolować kolejność obliczania wyrażeń etykiet. Domyślnie ! ma najwyższy priorytet i & ma wyższy pierwszeństwo niż |. W związku !A&B|C|!D z tym wartość jest taka sama jak ((!A)&B)|C|(!D).
Zmienne powiązania
Zmienne umożliwiają odwoływanie się do dopasowanych elementów grafu w innych częściach zapytania. Zrozumienie sposobu wiązania i używania zmiennych jest niezbędne do tworzenia zaawansowanych zapytań.
Wiązanie zmiennych elementów
Wzorce węzłów i krawędzi mogą wiązać dopasowane węzły i krawędzie ze zmiennymi w celu późniejszego odwołania.
(p:Person)-[w:workAt]->(c:Company)
W tym wzorcu p jest powiązany z pasującymi Person węzłami, w do pasujących workAt krawędzi i c do pasujących Company węzłów.
Ponowne użycie zmiennych w przypadku ograniczeń strukturalnych:
Ponowne przy użyciu tej samej zmiennej we wzorcu wiele razy wyraża ograniczenie struktury dopasowań. Każde wystąpienie tej samej zmiennej musi zawsze wiązać się z tym samym elementem grafu w prawidłowym dopasowaniu. Ponowne użycie zmiennych jest zaawansowane w celu wyrażania złożonych wymagań strukturalnych.
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Wzorzec znajduje Person węzły x i zna siebie nawzajem y i działa w tym samym Companyobiekcie , który jest powiązany ze zmienną c. Ponowne użycie c gwarantuje, że obie osoby pracują w tej samej firmie.
Predykaty wzorców ze zmiennymi elementów:
Zmienne elementu powiązania umożliwiają określanie predykatów wzorca węzła i krawędzi. Zamiast po prostu dostarczać wypełnienie z dokładnymi wartościami właściwości, takimi jak { name: "New York, USA" }, wypełniacz może określić predykat, który jest oceniany dla każdego elementu kandydata. Wzorzec jest zgodny tylko wtedy, gdy predykat daje wartość :TRUE
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
Wzorzec krawędzi znajduje ludzi, którzy znali się od 1 stycznia 2000 r., używając elastycznego warunku, a nie dokładnego dopasowania.
Uwaga / Notatka
Zmienne wzorca krawędzi zawsze wiążą się z poszczególnymi krawędziami w predykacie wzorca krawędzi, nawet w przypadku używania wzorców o zmiennej długości. Może to pomóc w braku konieczności niepotrzebnego wyświetlania zmiennych listy grup krawędzi w celu wykonania filtru po filtrze. Zobacz Wiązanie zmiennych krawędzi wzorca o zmiennej długości.
Zaawansowane techniki predykatu wzorca:
Predykaty wzorców zapewniają zaawansowane funkcje filtrowania wbudowanego, które mogą zwiększyć czytelność zapytań:
-- 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
Wskazówka
Używanie predykatów wzorców, gdy warunki są wysoce selektywne, mogą zmniejszyć rozmiar wyników pośredniczących.
Zmienne ścieżki powiązania
Możesz również powiązać dopasowaną ścieżkę ze zmienną ścieżki w celu dalszego przetwarzania lub zwrócić pełną strukturę ścieżki do użytkownika:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
p W tym miejscu jest powiązana z wartością ścieżki reprezentującą pełną dopasowaną strukturę ścieżki, w tym wartości odwołania dla wszystkich węzłów i krawędzi w podanej kolejności.
Ścieżki ograniczone mogą być zwracane użytkownikowi lub dalej przetwarzane za pomocą funkcji takich jak NODES lub 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
Tworzenie wzorców
Zapytania w świecie rzeczywistym często wymagają bardziej złożonych wzorców niż proste struktury węzłów brzegowych węzłów. GQL udostępnia kilka sposobów tworzenia wzorców dla zaawansowanych przechodzenia grafu.
Tworzenie wzorców ścieżek
Wzorce ścieżek mogą być komponowane przez łączenie prostych wzorców węzłów i krawędzi w celu utworzenia dłuższych przejść.
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Wzorzec przechodzi od osoby przez ich kontakty społeczne i zawodowe, aby znaleźć, gdzie znajduje się firma współpracownika.
Konstrukcja deseń częściowych: Wzorce ścieżek można również tworzyć przyrostowo, co ułatwia odczytywanie i zrozumienie złożonych wzorców:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
To podejście dzieli ten sam przechodzenie do kroków logicznych, co ułatwia zrozumienie i debugowanie.
Tworzenie wzorców nieliniowych
Wynikowy kształt wzorca nie musi być ścieżką liniową. Można dopasować bardziej złożone struktury, takie jak wzorce "w kształcie gwiazdy", które promieniują z węzła centralnego:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
Wzorzec znajduje osobę wraz z ich wykształceniem, zatrudnieniem i preferencjami zawartości jednocześnie — kompleksowym zapytaniem profilu.
Dopasowywanie szlaków
W złożonych wzorcach często niepożądane jest wielokrotne przechodzenie przez tę samą krawędź. Ponowne użycie krawędzi staje się ważne, gdy rzeczywisty wykres zawiera cykle, które mogą prowadzić do nieskończonych lub nadmiernie długich ścieżek. Aby obsłużyć ponowne użycie krawędzi, graf w usłudze Microsoft Fabric obsługuje TRAIL tryb dopasowania.
Prefiksowanie wzorca ścieżki ze słowem kluczowym TRAIL odrzuca wszystkie dopasowania, które wielokrotnie wiążą tę samą krawędź:
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
Za pomocą metody TRAILwzorzec generuje tylko dopasowania, w których wszystkie krawędzie są różne. W związku z tym nawet jeśli c = a ścieżka tworzy cykl w danym dopasowaniu, e3 nigdy nie wiąże się z tą samą krawędzią co e1.
Tryb TRAIL jest niezbędny do zapobiegania nieskończonym pętlom i zapewniania, że zapytania zwracają znaczące, niedysantne ścieżki.
Używanie wzorców o zmiennej długości
Wzorce o zmiennej długości to zaawansowane konstrukcje, które umożliwiają znajdowanie ścieżek o różnych długościach bez konieczności pisania powtarzających się specyfikacji wzorca. Są one niezbędne dla przechodzenia hierarchii, sieci społecznościowych i innych struktur, w których optymalna długość ścieżki nie jest znana z wyprzedzeniem.
Ograniczone wzorce o zmiennej długości
Ważne
Ograniczone wzorce o zmiennej długości obsługują obecnie tylko maksymalną górną granicę wynoszącą 8. Zobacz artykuł dotyczący bieżących ograniczeń.
Wiele typowych zapytań grafu wymaga wielokrotnego powtarzania tego samego wzorca krawędzi. Zamiast pisać pełne wzorce, takie jak:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
Możesz użyć bardziej zwięzłej składni o zmiennej długości:
(:Person)-[:knows]->{3}(:Person)
Określa {3} , że -[:knows]-> wzorzec krawędzi powinien być powtarzany dokładnie trzy razy.
Elastyczne zakresy powtórzeń: Aby uzyskać większą elastyczność, można określić zarówno dolną granicę, jak i górną granicę dla powtórzenia:
(:Person)-[:knows]->{1, 3}(:Person)
Ten wzorzec znajduje bezpośrednich przyjaciół, przyjaciół przyjaciół i przyjaciół przyjaciół-of-friends-of-friends-all w jednym zapytaniu.
Uwaga / Notatka
Dolna granica może również mieć wartość 0. W takim przypadku żadne krawędzie nie są dopasowane, a cały wzorzec jest zgodny tylko wtedy, gdy dwa wzorce węzłów punktu końcowego są zgodne z tym samym węzłem.
Przykład:
(p1:Person)-[r:knows WHERE NOT p1=p2]->{0,1}(p2:Person)
Ten wzorzec łączy pary różnych osób, które się znają, ale jednocześnie pasuje do tej samej osoby jako obie p1 i p2 – nawet jeśli ta osoba sama siebie nie "zna".
Jeśli nie zostanie określona żadna dolna granica, zazwyczaj wartość domyślna to 0 (zero).
Złożone kompozycje o zmiennej długości: Wzory o zmiennej długości mogą być częścią większych, bardziej złożonych wzorców, jak w następującym zapytaniu:
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
Wzorzec znajduje pary komentarzy, w których osoby, które znają się nawzajem lubiły różne komentarze, a te komentarze są połączone za pośrednictwem łańcuchów odpowiedzi 1–5 poziomów.
Wiązanie zmiennych krawędzi wzorca o zmiennej długości
Po powiązaniu wzorca krawędzi o zmiennej długości wartość i typ zmiennej krawędzi zmieniają się w zależności od kontekstu odwołania. Zrozumienie tego zachowania ma kluczowe znaczenie dla prawidłowego przetwarzania dopasowań o zmiennej długości:
Dwa stopnie odwołania:
- Wewnątrz wzorca o zmiennej długości: zmienne krawędzi grafu powiązane z poszczególnymi krawędziami wzdłuż dopasowanej ścieżki (nazywanej również "pojedynczym stopniem odwołania")
- Poza wzorcem o zmiennej długości: zmienne krawędzi grafu wiążą się z sekwencją wszystkich krawędzi wzdłuż dopasowanej ścieżki (nazywanej również "stopniem odniesienia grupy")
Przykład pokazujący oba konteksty:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
Ocena zmiennej e krawędzi odbywa się w dwóch kontekstach:
W oświadczeniu
MATCH: Zapytanie znajduje łańcuchy przyjaciół-of-friends-of-friends, gdzie każda przyjaźń została ustanowiona od roku 2000. Podczas dopasowywania wzorca predykate.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")wzorca krawędzi jest obliczany raz dla każdej krawędzi kandydata. W tym kontekścieejest powiązana z pojedynczą wartością referencyjną krawędzi.W instrukcji
RETURN: Tutajejest powiązana z listą (grup) wartości odwołań krawędzi w kolejności, w której występują w dopasowanym łańcuchu. Wynikieme[0]jest pierwsza wartość referencyjna krawędzi w każdym dopasowanym łańcuchu.
Zmienne krawędziowe wzoru o zmiennej długości w agregacji poziomej:
Zmienne krawędziowe ograniczone dopasowaniem wzorców o zmiennej długości to listy grupowe spoza wzorca o zmiennej długości i dlatego mogą być używane w agregacji poziomej.
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
Zobacz sekcję o agregacji poziomej po więcej szczegółów.