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.
Filtrowanie powoduje zawężenie wyników do wierszy, które mają znaczenie. Agregacja podsumowuje te wiersze w liczby, sumy i średnie. W tym artykule pokazano, jak zastosować obie techniki w zapytaniach GQL względem grafu w Microsoft Fabric.
Przykłady korzystają z przykładowego zestawu danych sieci społecznościowej. Aby uzyskać pełne odniesienie do instrukcji i wyrażeń GQL, zobacz Przewodnik języka GQL.
Wymagania wstępne
- Element grafu z załadowanymi danymi. Jeśli jesteś nowy w grafie, najpierw ukończ samouczek.
- Znajomość podstawowych
MATCHiRETURNzapytań. Zobacz Przewodnik po języku GQL.
Filtrowanie wierszy za pomocą filtru
Użyj polecenia FILTER , aby zachować tylko wiersze spełniające warunek. Umieść FILTER po MATCH, aby zawęzić dopasowane wyniki.
Następujące zapytanie zwraca wszystkie kobiety z ich nazwiskiem i urodzinami:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Połącz wiele warunków z AND i OR. Na przykład następujące zapytanie zwraca nazwy wszystkich kobiet urodzonych przed 1990 r.:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Wskazówka
Aby uzyskać lepszą wydajność, filtruj podczas dopasowywania wzorca za pomocą klauzuli wbudowanej WHERE , a nie w oddzielnej FILTER instrukcji. Zobacz Filtrowanie podczas dopasowywania wzorca.
Filtrowanie podczas dopasowywania wzorca
Klauzule wbudowane WHERE wewnątrz MATCH wzorca ograniczają, które węzły i krawędzie są dopasowywane przed utworzeniem jakichkolwiek wyników. Takie podejście jest bardziej wydajne niż klauzula po dopasowaniu FILTER , ponieważ aparat zapytań przycina wiersze wcześniej.
Aby na przykład znaleźć osoby urodzone przed 1994 r. wraz z firmą, w której pracują, ograniczając wyniki do firm, których nazwa zaczyna się od "A":
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filtruj właściwości krawędzi w taki sam sposób. Aby na przykład zwrócić tylko osoby, które rozpoczęły pracę w firmie w 2000 roku lub nowszym:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Aby uzyskać więcej informacji na temat różnicy wydajności między filtrowaniem wbudowanym i po dopasowaniu, zobacz Optymalizowanie wydajności zapytań GQL.
Obsługa wartości null w filtrach
GQL używa trójwartościowej logiki: predykaty przyjmują wartość TRUE, FALSE lub UNKNOWN. Gdy wartość właściwości ma wartość null, porównania zwracają wartość UNKNOWN.
FILTER uznaje UNKNOWN za niezgodny, więc wiersz jest wykluczony.
Użyj IS NULL i IS NOT NULL , aby jawnie przetestować wartości null:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Użyj coalesce(), aby zastąpić wartość domyślną, gdy właściwość może być pusta.
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Caution
NULL = NULL daje wynik UNKNOWN, a nie TRUE. Zawsze używaj IS NULL do testowania wartości pustych, a nie równości.
Agregowanie wyników za pomocą funkcji RETURN
Użyj funkcji agregujących w RETURN, aby podsumować wyniki. GQL obsługuje count(), sum(), avg(), min() i max().
Aby na przykład zliczyć wszystkie osoby na wykresie:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Aby zliczyć unikalne wartości, takie jak liczba różnych firm zatrudniających osoby:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Grupuj wyniki za pomocą funkcji GROUP BY
GROUP BY i RETURN służą do grupowania wierszy według wspólnych wartości i obliczania agregatów w każdej grupie. To grupowanie jest odpowiednikiem GQL języka SQL GROUP BY.
Aby na przykład policzyć pracowników na firmę:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Grupuj według wielu kolumn i oblicza kilka agregacji jednocześnie. Na przykład podziel liczbę osób i zakres urodzin według płci i przeglądarki, zwracając 10 najczęściej używanych kombinacji:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
Wszystkie wyrażenia niegregowane w pliku RETURN muszą być wyświetlane w pliku GROUP BY. Wyrażenia, które nie są zawarte w GROUP BY, muszą korzystać z funkcji agregującej.
Sortowanie i ograniczanie zagregowanych wyników
Użyj ORDER BY i LIMIT razem z GROUP BY, aby znaleźć wyniki top-N.
Aby na przykład znaleźć pięć pierwszych miast według liczby mieszkańców:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Important
Umieść ORDER BY przed LIMIT.
LIMIT zawsze ma zastosowanie do już posortowanego zestawu wyników.
Użyj funkcji CASE dla wartości warunkowych w wynikach
Użyj CASE/WHEN/THEN/ELSE do obliczania wartości warunkowych w RETURN lub LET.
Aby na przykład podzielić ludzi na epoki na podstawie ich roku urodzenia:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era