Filtrowanie i agregowanie danych grafu w Microsoft Fabric

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.

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 MATCH i RETURN zapytań. 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