Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Note
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.
Ten artykuł zawiera praktyczne wzorce zapytań języka GQL dla typowych zadań grafu w Microsoft Fabric: znajdowanie sąsiadów, przechodzenie przez połączenia wielohopowe, identyfikowanie połączeń udostępnionych, liczenie relacji i znajdowanie jednostek bez połączeń.
Przykłady korzystają z przykładowego zestawu danych sieci społecznościowej. Aby uzyskać pełną dokumentację języka, zobacz Przewodnik po języku GQL.
Wymagania wstępne
- Element grafu z załadowanymi danymi. Jeśli jesteś nowicjuszem w grafach, najpierw ukończ samouczek.
- Znajomość podstawowych
MATCHiRETURNzapytań. Zobacz Przewodnik po języku GQL.
Znajdowanie bezpośrednich sąsiadów
Zwróć wszystkie węzły połączone z węzłem początkowym przez jeden przeskok.
Znajdź wszystkich, których dana osoba zna:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Znajdź wszystkie firmy, w których pracowała osoba:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Znajdź znajomych znajomych (multi-hop)
Użyj wzorców o zmiennej długości, aby za pomocą {min,max} pokonać więcej niż jeden skok.
Znajdź ludzi dwa stopnie oddalenia - znajomi znajomych Alicji, których Alicja nie zna osobiście.
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Znajdź wszystkich osiągalnych w zasięgu trzech stopni.
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Wskazówka
Zawsze ustanawiaj górną granicę dla iteracji o zmiennej długości. Nieograniczone wzorce na dużych lub gęstych grafach mogą przekroczyć limit czasu zapytania. Zobacz Bieżące ograniczenia.
Zlicz relacje na jednostkę
Użyj polecenia GROUP BY , count(*) aby policzyć liczbę relacji, które ma każda jednostka.
Zlicz, ile znajomych ma każda osoba, uporządkowanych od większości do najmniejszych:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20
Zlicz, ile pracowników pracuje w każdej firmie:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Znajdowanie połączeń udostępnionych
Ponowne użycie zmiennej w dwóch częściach wzorca tworzy niejawne ograniczenie "tego samego węzła". Użyj tego ograniczenia, aby znaleźć jednostki połączone za pośrednictwem udostępnionej trzeciej jednostki.
Znajdź pary osób, które znają tę samą osobę:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
Znajdź pary osób, które pracują w tej samej firmie:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Wskazówka
Warunek WHERE a.id < b.id uniemożliwia pojawienie się zduplikowanych par (Alice–Bob i Bob–Alice) w wynikach.
Znajdowanie jednostek bez relacji
Użyj OPTIONAL MATCH, a następnie sprawdzania wartości null, aby znaleźć węzły, które nie mają zgodnej relacji.
Znajdź osoby, które nie pracują w żadnej firmie:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Znajdź wpisy bez komentarzy:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Znajdowanie jednostek z wieloma połączeniami
Połącz GROUP BY i FILTER , aby zidentyfikować węzły o wysokim stopniu połączenia. Ta metoda jest przydatna do znajdowania węzłów lub wartości odstających.
Znajdź osoby z ponad 10 przyjaciółmi:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER po GROUP BY działa podobnie jak HAVING w SQL. Filtruje on zagregowany wynik, a nie poszczególne wiersze.