Запускает запрос агрегирования.
Вместо того, чтобы создавать результаты Document
, такие как Firestore.RunQuery
, этот API позволяет запускать агрегацию для создания серии AggregationResult
на стороне сервера.
Пример высокого уровня:
-- Return the number of documents in table given a filter.
SELECT COUNT(*) FROM ( SELECT * FROM k where a = true );
HTTP-запрос
POST https://firestore.googleapis.com/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery
URL-адрес использует синтаксис транскодирования gRPC .
Параметры пути
Параметры | |
---|---|
parent | Необходимый. Имя родительского ресурса. В формате: |
Тело запроса
Тело запроса содержит данные следующей структуры:
JSON-представление |
---|
{ "explainOptions": { object ( |
Поля | |
---|---|
explainOptions | Необязательный. Объясните варианты запроса. Если установлено, будет возвращена дополнительная статистика запросов. В противном случае будут возвращены только результаты запроса. |
Поле объединения query_type . Запрос для выполнения. query_type может быть только одним из следующих: | |
structuredAggregationQuery | Агрегирующий запрос. |
Объединённое поле consistency_selector . Режим согласованности для запроса по умолчанию — строгая согласованность. consistency_selector может быть только одним из следующих: | |
transaction | Запустите агрегацию в уже активной транзакции. Значением здесь является непрозрачный идентификатор транзакции, в которой будет выполнен запрос. Строка в кодировке Base64. |
newTransaction | Запускает новую транзакцию как часть запроса, по умолчанию доступную только для чтения. Новый идентификатор транзакции будет возвращен в качестве первого ответа в потоке. |
readTime | Выполняет запрос в заданную временную метку. Это должна быть метка времени с точностью до микросекунды за последний час или, если включено восстановление на момент времени, дополнительно может быть метка времени с точностью до целой минуты за последние 7 дней. Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
Тело ответа
Ответ на Firestore.RunAggregationQuery
.
В случае успеха тело ответа содержит данные следующей структуры:
JSON-представление |
---|
{ "result": { object ( |
Поля | |
---|---|
result | Единый результат агрегирования. Не отображается при сообщении о частичном прогрессе. |
transaction | Транзакция, которая была запущена в рамках этого запроса. Присутствует только в первом ответе, когда запрос запрашивает начало новой транзакции. Строка в кодировке Base64. |
readTime | Время, за которое был вычислен совокупный результат. Оно всегда монотонно возрастает; в этом случае предыдущий AggregationResult в потоке результатов гарантированно не изменится между их Если запрос не возвращает результатов, будет отправлен ответ с Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: |
explainMetrics | Метрики объяснения запроса. Он присутствует только в том случае, если указан |
Области авторизации
Требуется одна из следующих областей OAuth:
-
https://www.googleapis.com/auth/datastore
-
https://www.googleapis.com/auth/cloud-platform
Для получения дополнительной информации см. Обзор аутентификации .
Структурированный запрос агрегации
Запрос Firestore для выполнения агрегации через StructuredQuery
.
JSON-представление |
---|
{ "aggregations": [ { object ( |
Поля | |
---|---|
aggregations[] | Необязательный. Серия агрегатов, применяемых к результатам Требует:
|
Поле объединения query_type . Базовый запрос для агрегирования. query_type может быть только одним из следующих: | |
structuredQuery | Вложенный структурированный запрос. |
Агрегация
Определяет агрегацию, которая дает один результат.
JSON-представление |
---|
{ "alias": string, // Union field |
Поля | |
---|---|
alias | Необязательный. Необязательное имя поля, в котором будет сохранен результат агрегации. Если оно не указано, Firestore выберет имя по умолчанию в формате
становится:
Требует:
|
Полевой operator Союза. Обязательный тип выполняемой агрегации. operator может быть только одним из следующих: | |
count | Счетный агрегатор. |
sum | Суммарный агрегатор. |
avg | Средний агрегатор. |
Считать
Количество документов, соответствующих запросу.
Функция агрегирования COUNT(*)
работает со всем документом, поэтому не требует ссылки на поле.
JSON-представление |
---|
{ "upTo": string } |
Поля | |
---|---|
upTo | Необязательный. Необязательное ограничение на максимальное количество документов для подсчета. Это дает возможность установить верхнюю границу количества сканируемых документов, ограничивая задержку и стоимость. Unspecified интерпретируется как отсутствие ограничений. Пример высокого уровня:
Требует:
|
Сумма
Сумма значений запрошенного поля.
Будут агрегироваться только числовые значения. Все нечисловые значения, включая
NULL
пропускаются.Если агрегированные значения содержат
NaN
, возвращаетсяNaN
. Математика Infinity соответствует стандартам IEEE-754.Если набор агрегированных значений пуст, возвращается 0.
Возвращает 64-битное целое число, если все агрегированные числа являются целыми числами и результат суммы не переполняется. В противном случае результат возвращается как двойной. Обратите внимание: даже если все агрегированные значения являются целыми числами, результат возвращается как двойное число, если он не может поместиться в 64-битное целое число со знаком. В этом случае возвращаемое значение потеряет точность.
Когда происходит опустошение, агрегирование с плавающей запятой является недетерминированным. Это означает, что повторный запуск одного и того же запроса без каких-либо изменений базовых значений может каждый раз давать немного разные результаты. В таких случаях значения следует хранить как целые числа, а не числа с плавающей запятой.
JSON-представление |
---|
{
"field": {
object ( |
Поля | |
---|---|
field | Поле для агрегирования. |
Среднее
Среднее значение запрошенного поля.
Будут агрегироваться только числовые значения. Все нечисловые значения, включая
NULL
пропускаются.Если агрегированные значения содержат
NaN
, возвращаетсяNaN
. Математика Infinity соответствует стандартам IEEE-754.Если набор агрегированных значений пуст, возвращается
NULL
.Всегда возвращает результат как двойной.
JSON-представление |
---|
{
"field": {
object ( |
Поля | |
---|---|
field | Поле для агрегирования. |
Результат агрегации
Результат одного сегмента из запроса агрегации Firestore.
Ключи aggregateFields
одинаковы для всех результатов в запросе агрегирования, в отличие от запросов документов, в которых для каждого результата могут присутствовать разные поля.
JSON-представление |
---|
{
"aggregateFields": {
string: {
object ( |
Поля | |
---|---|
aggregateFields | Результат функций агрегирования, например: Ключом является Объект, содержащий список пар |