Uruchamia zapytanie agregacji.
Zamiast generować wyniki Document
, takie jak Firestore.RunQuery
, ten interfejs API umożliwia uruchomienie agregacji w celu utworzenia serii AggregationResult
po stronie serwera.
Przykład wysokiego poziomu:
-- 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/v1beta1/{parent=projects/*/databases/*/documents}:runAggregationQuery
Adres URL używa składni transkodowania gRPC.
Parametry ścieżki
Parametry | |
---|---|
parent |
To pole jest 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 skonfigurowana, zwracane są dodatkowe statystyki zapytań. W przeciwnym razie zwracane będą tylko wyniki zapytania. |
Pole sumy query_type . Zapytanie do wykonania. query_type może być tylko jedną z tych wartości: |
|
structuredAggregationQuery |
Zapytanie obejmujące agregację. |
Pole sumy consistency_selector . Tryb spójności zapytania domyślnie ustawia silną spójność. consistency_selector może być tylko jedną z tych wartości: |
|
transaction |
Uruchom agregację w ramach już aktywnej transakcji. Wartością w tym polu jest nieprzejrzysty identyfikator transakcji, w ramach którego zostanie wykonane zapytanie. Ciąg zakodowany w standardzie base64. |
newTransaction |
Rozpoczyna nową transakcję w ramach zapytania. Domyślnie jest on ustawiony jako 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 precyzji określona w mikrosekundach z ostatniej godziny lub jeśli włączona jest funkcja odzyskiwania do określonego momentu, może to być dodatkowo sygnatura czasowa obejmująca całą minutę z ostatnich 7 dni. Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
Treść odpowiedzi
Odpowiedź dotycząca: Firestore.RunAggregationQuery
.
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
Zapis JSON |
---|
{ "result": { object ( |
Pola | |
---|---|
result |
Jeden wynik agregacji. Brak w przypadku raportowania częściowego postępu. |
transaction |
Transakcja rozpoczęta w ramach tego żądania. Występuje tylko w pierwszej odpowiedzi, gdy żądanie zażądało rozpoczęcia nowej transakcji. Ciąg zakodowany w standardzie base64. |
readTime |
Czas obliczenia wyniku zbiorczego. Ta wartość jest zawsze rosnąca monotonicznie. W tym przypadku poprzednia wartość AggregationResult w strumieniu wyników na pewno nie zmieniła się między wartością Jeśli zapytanie nie zwróci żadnych wyników, zostanie wysłana odpowiedź z parametrem Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
explainMetrics |
Zapytanie dotyczące wskaźników. Jest ona obecna tylko wtedy, gdy podano |
Zakresy autoryzacji
Wymaga jednego z tych zakresów OAuth:
https://www.googleapis.com/auth/datastore
https://www.googleapis.com/auth/cloud-platform
Więcej informacji znajdziesz w artykule Omówienie uwierzytelniania.
StructuredAggregationQuery
Zapytanie Firestore dotyczące uruchomienia agregacji w obiekcie StructuredQuery
.
Zapis JSON |
---|
{ "aggregations": [ { object ( |
Pola | |
---|---|
aggregations[] |
Opcjonalnie. Seria agregacji do zastosowania do wyników funkcji Wymagane:
|
Pole sumy query_type . Podstawowe zapytanie, na podstawie którego następuje agregacja. query_type może być tylko jedną z tych wartości: |
|
structuredQuery |
Zagnieżdżone uporządkowane zapytanie. |
Agregacja
Definiuje agregację, która daje jeden wynik.
Zapis JSON |
---|
{ "alias": string, // Union field |
Pola | |
---|---|
alias |
Opcjonalnie. Opcjonalna nazwa pola, w którym ma być przechowywany wynik agregacji. Jeśli jej nie podasz, Firestore wybierze nazwę domyślną w formacie
zmienia się w:
Wymagane:
|
Pole sumy operator . Wymagany typ agregacji do przeprowadzenia. operator może być tylko jedną z tych wartości: |
|
count |
Agregator liczników. |
sum |
Agregator sum. |
avg |
Przeciętny pośrednik. |
Liczba
Liczba dokumentów pasujących do zapytania.
Funkcja agregacji COUNT(*)
działa w obrębie całego dokumentu, więc nie wymaga odwołania do pola.
Zapis JSON |
---|
{ "upTo": string } |
Pola | |
---|---|
upTo |
Opcjonalnie. Opcjonalne ograniczenie maksymalnej liczby dokumentów do zliczenia. Pozwala to ustawić górną granicę liczby dokumentów do skanowania, ograniczając czas oczekiwania i koszty. Wartość nieokreślona jest interpretowana jako brak ograniczeń. Przykład wysokiego poziomu:
Wymagane:
|
Suma
Suma wartości żądanego pola.
Agregowane zostaną tylko wartości liczbowe. Wszystkie wartości nieliczbowe, w tym
NULL
, są pomijane.Jeśli wartości zbiorcze zawierają
NaN
, zwracaNaN
. Infinity Math jest zgodny ze standardami IEEE-754.Jeśli zestaw wartości zagregowanych jest pusty, zwraca wartość 0.
Zwraca 64-bitową liczbę całkowitą, jeśli wszystkie zagregowane liczby są liczbami całkowitymi, a wynik sumy nie przekracza. W przeciwnym razie wynik jest zwracany jako liczba zmiennoprzecinkowa. Pamiętaj, że nawet jeśli wszystkie zagregowane wartości są liczbami całkowitymi, to wynik jest zwracany jako liczba zmiennoprzecinkowa, jeśli nie mieści się on w 64-bitowej ze znakiem. W takim przypadku zwrócona wartość straci precyzję.
W takim przypadku agregacja liczb zmiennoprzecinkowych nie jest deterministyczna. Oznacza to, że wielokrotne wykonywanie tego samego zapytania bez wprowadzania zmian w wartościach bazowych może za każdym razem przynieść nieco inne wyniki. W takich przypadkach wartości należy przechowywać jako liczby całkowite zamiast liczb zmiennoprzecinkowych.
Zapis JSON |
---|
{
"field": {
object ( |
Pola | |
---|---|
field |
Pole, na podstawie którego mają być agregowane dane. |
Śr.
Średnia z wartości żądanego pola.
Agregowane zostaną tylko wartości liczbowe. Wszystkie wartości nieliczbowe, w tym
NULL
, są pomijane.Jeśli wartości zbiorcze zawierają
NaN
, zwracaNaN
. Infinity Math jest zgodny ze standardami IEEE-754.Jeśli zbiór wartości zagregowanych jest pusty, zwraca
NULL
.Zawsze zwraca wynik jako liczbę zmiennoprzecinkową.
Zapis JSON |
---|
{
"field": {
object ( |
Pola | |
---|---|
field |
Pole, na podstawie którego mają być agregowane dane. |
AggregationResult
Wynik pojedynczego zasobnika z zapytania agregacji Firestore.
Klucze funkcji aggregateFields
są takie same dla wszystkich wyników zapytania agregacji w przeciwieństwie do zapytań dotyczących dokumentów, które dla każdego wyniku mogą mieć inne pola.
Zapis JSON |
---|
{
"aggregateFields": {
string: {
object ( |
Pola | |
---|---|
aggregateFields |
Wynik funkcji agregacji, np. Klucz to Obiekt zawierający listę par |