Uruchamia zapytanie agregacji.
Zamiast generować wyniki Document
takie jak Firestore.RunQuery
, ten interfejs API umożliwia przeprowadzenie agregacji w celu wygenerowania serii AggregationResult
po stronie serwera.
Ogólny przykład:
-- Return the number of documents in table given a filter.
SELECT COUNT(*) FROM ( SELECT * FROM k where a = true );
Żądanie HTTP
POST https://firestore.googleapis.com/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery
Adres URL używa składni transkodowania gRPC.
Parametry ścieżki
Parametry | |
---|---|
parent |
Wymagane. Nazwa zasobu nadrzędnego. W formacie: |
Treść żądania
Treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "explainOptions": { object ( |
Pola | |
---|---|
explainOptions |
Opcjonalnie. Wyjaśnij opcje zapytania. Jeśli jest ustawione, zwracane są dodatkowe statystyki zapytań. W przeciwnym razie zwracane będą tylko wyniki zapytania. |
Pole sumy query_type . Zapytanie do uruchomienia. query_type może mieć tylko jedną z tych wartości: |
|
structuredAggregationQuery |
Zapytanie agregujące. |
Pole sumy consistency_selector . Tryb spójności zapytania domyślnie ma silną spójność. consistency_selector może mieć tylko jedną z tych wartości: |
|
transaction |
Uruchom agregację w ramach już aktywnej transakcji. Wartość w tym miejscu to nieprzejrzysty identyfikator transakcji, w której ma zostać wykonane zapytanie. Ciąg zakodowany w formacie base64. |
newTransaction |
Uruchamia nową transakcję w ramach zapytania z domyślnym ustawieniem „tylko do odczytu”. Nowy identyfikator transakcji zostanie zwrócony jako pierwsza odpowiedź w strumieniu. |
readTime |
Wykonuje zapytanie o podanej sygnaturze czasowej. Musi to być sygnatura czasowa z dokładnością do mikrosekundy z ostatniej godziny. Jeśli odzyskiwanie do określonego momentu jest włączone, może to być dodatkowo pełna sygnatura czasowa z ostatnich 7 dni. Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
Treść odpowiedzi
Odpowiedź dla: Firestore.RunAggregationQuery
.
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "result": { object ( |
Pola | |
---|---|
result |
Jeden wynik agregacji. Nie występuje w przypadku raportowania częściowego postępu. |
transaction |
Transakcja rozpoczęta w ramach tego żądania. Widoczny tylko w pierwszej odpowiedzi, gdy żądanie dotyczyło rozpoczęcia nowej transakcji. Ciąg zakodowany w formacie base64. |
readTime |
Godzina obliczenia wyniku zagregowanego. Ta wartość jest zawsze monotonicznie rosnąca. w tym przypadku poprzedni wynik AggregationResult w strumieniu wyników nie zmieni się między Jeśli zapytanie nie zwróci żadnych wyników, zostanie wysłana odpowiedź z parametrem Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
explainMetrics |
Wskaźniki wyjaśnień zapytania. Ten parametr występuje tylko wtedy, gdy podano |
Zakresy autoryzacji
Wymaga jednego z tych zakresów protokołu OAuth:
https://www.googleapis.com/auth/datastore
https://www.googleapis.com/auth/cloud-platform
Więcej informacji znajdziesz w artykule o uwierzytelnianiu (w języku angielskim).
Zapytanie agregacji uporządkowanych danych
Zapytanie Firestore dotyczące uruchomienia agregacji w zasobniku StructuredQuery
.
Zapis JSON |
---|
{ "aggregations": [ { object ( |
Pola | |
---|---|
aggregations[] |
Opcjonalnie. Seria agregacji, które zostaną zastosowane do wyników funkcji Wymagane:
|
Pole sumy query_type . Podstawowe zapytanie do agregacji. query_type może mieć tylko jedną z tych wartości: |
|
structuredQuery |
Zagnieżdżone uporządkowane zapytanie. |
Agregacja
Definiuje agregację, która skutkuje jednym wynikiem.
Zapis JSON |
---|
{ "alias": string, // Union field |
Pola | |
---|---|
alias |
Opcjonalnie. Opcjonalna nazwa pola, w którym mają być przechowywane wynik agregacji. Jeśli nie zostanie podana, Firestore wybierze nazwę domyślną w formacie
zmienia się w:
Wymagane:
|
Pole sumy operator . Wymagany typ agregacji do wykonania. operator może mieć tylko jedną z tych wartości: |
|
count |
Agregator liczb. |
sum |
Agregator sum. |
avg |
Przeciętny agregator. |
Liczba
Liczba dokumentów pasujących do zapytania.
Funkcja agregacji COUNT(*)
działa w całym dokumencie, więc nie wymaga odwołania do pola.
Zapis JSON |
---|
{ "upTo": string } |
Pola | |
---|---|
upTo |
Opcjonalnie. Opcjonalne ograniczenie maksymalnej liczby dokumentów do zliczania. Umożliwia to ustawienie górnej granicy liczby dokumentów do skanowania, co pozwala ograniczyć czas oczekiwania i koszty. Wartość nieokreślona jest interpretowana jako brak zakresu. Ogólny przykład:
Wymagane:
|
Suma
Suma wartości żądanego pola.
Agregowane będą tylko wartości liczbowe. Wszystkie wartości nieliczbowe, w tym
NULL
, są pominięte.Jeśli zagregowane wartości zawierają wartość
NaN
, funkcja zwracaNaN
. Funkcja matematyki Infinity jest zgodna ze standardami IEEE-754.Jeśli zbiór zagregowanych wartości jest pusty, zwraca 0.
Zwraca 64-bitową liczbę całkowitą, jeśli wszystkie zagregowane liczby są liczbami całkowitymi, a wynik sumy nie przekroczy wartości. W przeciwnym razie wynik jest liczbą zmiennoprzecinkową. Nawet jeśli wszystkie zagregowane wartości są liczbami całkowitymi, wynik jest zwracany jako liczba zmiennoprzecinkowa, jeśli nie mieści się w 64-bitowej liczbie znaków ze znakiem. W takim przypadku zwracana wartość utraci precyzję.
Gdy występuje niedopełnienie, agregacja zmiennoprzecinkowa jest niedeterministyczna. Oznacza to, że wielokrotne wykonywanie tego samego zapytania bez zmian w wartościach może za każdym razem dawać nieco inne wyniki. W takich przypadkach wartości powinny być przechowywane w postaci liczb całkowitych zamiast liczb zmiennoprzecinkowych.
Zapis JSON |
---|
{
"field": {
object ( |
Pola | |
---|---|
field |
Pole do agregacji. |
Średnio
Średnia wartości żądanego pola.
Agregowane będą tylko wartości liczbowe. Wszystkie wartości nieliczbowe, w tym
NULL
, są pominięte.Jeśli zagregowane wartości zawierają wartość
NaN
, funkcja zwracaNaN
. Funkcja matematyki Infinity jest zgodna ze standardami IEEE-754.Jeśli zbiór zagregowanych wartości jest pusty, zwraca
NULL
.Zawsze zwraca wynik w postaci liczby zmiennoprzecinkowej.
Zapis JSON |
---|
{
"field": {
object ( |
Pola | |
---|---|
field |
Pole do agregacji. |
Wynik agregacji
Wynik pojedynczego zasobnika z zapytania agregacji Firestore.
Klucze funkcji aggregateFields
są takie same w przypadku wszystkich wyników w zapytaniu agregowanym. W odróżnieniu od zapytań dokumentów, w których przypadku każdy wynik może zawierać inne pola.
Zapis JSON |
---|
{
"aggregateFields": {
string: {
object ( |
Pola | |
---|---|
aggregateFields |
Wynik funkcji agregacji, np. Klucz to element Obiekt zawierający listę par |