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.
Ten artykuł zawiera kompleksowe informacje dotyczące wyrażeń GQL, predykatów i wbudowanych funkcji dostępnych na grafach w zapytaniach usługi Microsoft Fabric. Skorzystaj z tej dokumentacji, aby dowiedzieć się, jak wykonywać obliczenia, filtrować wyniki i przekształcać dane w zapytaniach grafu.
Omówienie języka zapytań GQL i kompleksowe przykłady zapytań można znaleźć w przewodniku języka GQL. Aby uzyskać informacje o obsługiwanych typach danych i składni literału, zobacz GQL values and value types (Wartości I typy wartości GQL).
Literals
Literały to proste wyrażenia, które bezpośrednio oceniają wartość podaną. W artykule GQL values and value types (Wartości I typy wartości GQL ) opisano literały każdego rodzaju wartości szczegółowo.
Example:
1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL
Aby uzyskać szczegółową składnię literału dla każdego typu danych, zobacz GQL values and value types (Wartości I typy wartości GQL).
Predicates
Predykaty to wyrażenia logiczne, których często używasz do filtrowania wyników w zapytaniach GQL. Oceniają wartości TRUE, FALSElub UNKNOWN (null).
Ostrzeżenie
W przypadku używania predykatów jako filtru zachowują tylko te elementy, dla których predykat ocenia wartość TRUE.
Predykaty porównania
Użyj tych operatorów, aby porównać wartości:
-
=(równe) -
<>(nie równa się) -
<(mniejsze niż) -
>(większe niż) -
<=(mniejsze niż lub równe) -
>=(większe niż lub równe)
Biblioteka GQL używa trzywartej logiki, w której porównania z zwracanymi wartościami UNKNOWNnull:
| Expression | Wynik |
|---|---|
5 = 5 |
TRUE |
5 = 3 |
FALSE |
5 = NULL |
UNKNOWN |
NULL = NULL |
UNKNOWN |
Aby uzyskać konkretne zachowanie porównania, zobacz dokumentację dla każdego typu wartości w wartościach I typach wartości GQL.
Example:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName
Reguły przymusu liczbowego:
Użyj następujących reguł w kolejności pierwszeństwa:
- Wyrażenia porównania, które obejmują argumenty przybliżonych typów liczbowych, coerce wszystkie argumenty mają być przybliżonym typem liczbowym.
- Wyrażenia porównania, które obejmują argumenty typu liczby całkowitej ze znakiem i bez znaku, coerce wszystkie argumenty mają być typu liczby całkowitej ze znakiem.
Wyrażenia logiczne
Łączenie warunków z operatorami logicznymi:
-
AND(oba warunki są prawdziwe) -
OR(dowolny warunek true) -
NOT(neguje warunek) -
XOR(wyłączny rozsyłanie — prawda, gdy dokładnie jeden operand ma wartość true)
Example:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName
Predykaty istnienia właściwości
Aby sprawdzić, czy właściwości istnieją, użyj tych predykatów:
p.locationIP IS NOT NULL
p.browserUsed IS NULL
Uwaga / Notatka
Próba dostępu do znanej nieistniejącej właściwości skutkuje błędem składni.
Dostęp do potencjalnie nieistniejącej własności wyznacza się na .null
Określenie, czy właściwość jest znana, czy potencjalnie nie istnieje, jest oparta na typie dostępnego węzła lub krawędzi.
Wyświetlanie listy predykatów członkostwa
Sprawdź, czy wartości znajdują się na listach:
p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']
Predykaty wzorca ciągów
Dopasowywanie ciągów przy użyciu technik dopasowywania wzorców:
p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'
Wyrażenia arytmetyczne
Użyj standardowych operatorów arytmetycznych z wartościami liczbowymi:
-
+(dodawanie) -
-(odejmowanie) -
*(mnożenie) -
/(dzielenie)
Operatory arytmetyczne są zgodne z ogólnymi konwencjami matematycznymi.
Pierwszeństwo:
Ogólnie rzecz biorąc, operatory są zgodne z ustalonymi regułami pierwszeństwa operatora, takimi jak * przed +. Użyj nawiasów, aby kontrolować kolejność oceny zgodnie z potrzebami.
Example:
(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'
Reguły przymusu:
Użyj następujących reguł w kolejności pierwszeństwa:
- Wyrażenia arytmetyczne obejmujące argumenty przybliżonych typów liczb zwracają wynik przybliżonego typu liczbowego.
- Wyrażenia arytmetyczne obejmujące argumenty zarówno typów ze znakiem, jak i niepodpisanych liczb całkowitych zwracają wynik typu liczby całkowitej ze znakiem.
Example:
LET birth_year = p.birthday / 10000
RETURN birth_year
Dostęp do właściwości
Uzyskiwanie dostępu do właściwości za pomocą notacji kropkowej:
p.firstName
edge.creationDate
Dostęp do listy
Uzyskiwanie dostępu do elementów listy przy użyciu indeksowania opartego na zerowaniu:
interests[0] -- first element
interests[1] -- second element
Wbudowane funkcje
Biblioteka GQL obsługuje różne wbudowane funkcje przetwarzania i analizy danych.
Funkcje agregujące
Użyj funkcji agregujących, aby ocenić wyrażenie dla zestawu wierszy i uzyskać końcową wartość wyniku, łącząc wartości obliczone dla każdego wiersza. Program Graph obsługuje następujące funkcje agregujące:
-
count(*)- zlicza wiersze -
sum(expression)- sumuje wartości liczbowe -
avg(expression)- średnie wartości liczbowe -
min(expression)— znajduje wartość minimalną -
max(expression)— znajduje maksymalną wartość -
collect_list(expression)- zbiera wartości na liście
Ogólnie rzecz biorąc, funkcje agregujące ignorują wartości null i zawsze zwracają wartość null, gdy nie podano żadnych materialnych wartości wejściowych. Możesz użyć coalesce polecenia , aby uzyskać inną wartość domyślną: coalesce(sum(expr), 0). Jedynym wyjątkiem jest count funkcja agregacji, która zawsze zlicza podane wartości inne niż null, zwracając 0, jeśli nie ma żadnych. Użyj polecenia count(*) , aby uwzględnić wartości null w liczbie.
Użyj funkcji agregujących na trzy różne sposoby:
- Aby obliczyć (pionowe) agregacje na całej tabeli
- Aby obliczyć (w pionie) agregacje za pośrednictwem podtabli określonych przez klucz grupowania
- Aby obliczyć (poziome) agregacje elementów listy grup
Agregacje pionowe:
-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name
Agregacje poziome:
Obliczenia agregacji poziomej agregują elementy zmiennych listy grup z wzorców o zmiennej długości:
-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date
Agregacja pozioma zawsze ma pierwszeństwo przed agregacją pionową.
Aby przekonwertować listę grup na zwykłą listę, użyj polecenia collect_list(edges).
Uwaga / Notatka
Aby uzyskać kompleksowy zakres technik agregacji, w tym powiązania krawędzi o zmiennej długości i łączenia agregacji poziomej/pionowej, zobacz Zaawansowane techniki agregacji.
Wyrażenia warunkowe
Użyj wyrażeń warunkowych, aby zwracać różne wartości na podstawie warunków.
Przeszukana SPRAWA:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Prosty PRZYPADEK:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
NULLIF:
NULLIF(a, b) funkcja zwraca NULL wartość , jeśli a wartość jest równa b, w przeciwnym razie zwraca wartość a.
Example:
MATCH (p:Person)
RETURN p.firstName,
CASE
WHEN p.gender = 'male' THEN 'M'
WHEN p.gender = 'female' THEN 'F'
ELSE 'Other'
END AS gender_code,
NULLIF(p.browserUsed, 'Unknown') AS browser
Funkcje łańcuchów znakowych
-
char_length(string)— zwraca długość ciągu. -
upper(string)— zwraca wariant wielkiej litery podanego ciągu (tylko us ASCII). -
lower(string)- zwraca małe litery wariant podanego ciągu (tylko US ASCII). -
trim(string)— usuwa białe znaki wiodące i końcowe. -
string_join(list, separator)- łączy elementy listy z separatorem.
Example:
MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper
Funkcje grafu
-
nodes(path)— zwraca węzły z wartości ścieżki. -
edges(path)— zwraca krawędzie z wartości ścieżki. -
elements(path)— zwraca wszystkie węzły i krawędzie ze ścieżki jako pojedynczą listę w kolejności ścieżki. -
labels(node_or_edge)— zwraca etykiety węzła lub krawędzi jako listę ciągów. -
path_length(path)— zwraca liczbę krawędzi w ścieżce.
Example:
MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops
Funkcje listy
-
size(list)— zwraca rozmiar wartości listy. -
trim(list,n)- przycina listę, aby mieć maksymalny rozmiarn.
Example:
MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests
Funkcje czasowe
-
zoned_datetime()— zwraca bieżącą strefową datę/godzinę. -
zoned_datetime("2025-09-12T10:10:52Z")— zwraca strefową datę/godzinę podaną przez argument w formacie ISO 8601.
Example:
RETURN zoned_datetime() AS now
Funkcje ogólne
-
coalesce(value1, value2, ...)— zwraca pierwszą wartość inną niż null. -
to_json_string(value)— konwertuje wartość na reprezentację ciągu JSON.
Example:
MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
to_json_string(p) AS person_json