.. _query.estimation.rs: query.estimation.rs ~~~~~~~~~~~~~~~~~~~ Топик ``QUERY.ESTIMATION.RS`` предоставляет возможность произвести предварительную оценку объема получаемых данных при выполнении запроса к Витрине данных, а также, ограничить выгрузку данных в случае, если количество получаемых данных превысит заданное количество строк (параметр ``rowCountThreshold``). В этом случае, ответом на запрос будет предварительная оценка объема. Например, если вам нужна информация из какой-либо таблицы контактов, то, возможно, следует предварительно узнать, какой объем данных вы можете получить на такой запрос т.к ответ может содержать несколько гигабайт информации и выполнение запроса может занять много времени. Вы сможете установить ограничение на получение данных, например, не более 10 контактов из таблицы. В этом случае, если ответом на запрос будет 5 контактов, то Витрина предоставит ответ полностью. Если ответом будет 1000 контактов, то в качестве ответа будет сформирована предварительная оценка такого ответа, а именно, что данный ответ будет содержать 1000 строк и содержать информацию, например, на 15000 байт. Используя топик ``query.estimation.rs`` можно прогнозировать объем получаемых данных, в соответствии с которыми оптимизировать запросы к Витрине. В случае использования топика ``query.estimation.rs`` запрашивается не конечный ответ на запрос, а приблизительная оценка объема (байт) и количество строк в ответе. .. note:: Данное требование не распространяется на механизм подписок Потребителей данных ПОДД. **Алгоритм работы query.estimation.rs** #. Витрина получает запрос :ref:`query.rq` с признаком ``isForEstimation`` оценивает объем результата по этому запросу (в байтах и количестве строк). #. Витрина сравнивает результаты оценки объема запроса со значением предельного числа строк в параметре ``rowCountThreshold`` (топик :ref:`query.rq`). #. Если значение в оценке меньше, чем предельное значение в ``rowCountThreshold``, то Витрина возвращает результат запроса в качестве ответа в топик :ref:`query.rs`. #. Если значение оценки превышает предельное значение, возвращает предварительную оценку объема в качестве ответа. **Структура сообщения** .. code-block:: yaml datamartQueryEstimationMessage: description: Оценка по запросу schemaFormat: 'application/vnd.apache.avro;version=1.9.0' bindings: kafka: key: type: string format: uuid description: Уникальный идентификатор подзапроса payload: $ref: '#/components/schemas/datamartQueryEstimation' examples: - name: estimation summary: Сообщение с оценкой по исполнению запроса payload: requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14 subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe estimatedRowCount: 100 estimatedSize: 1000 estimatedTime: 50 **Avro-схема сообщения** .. code-block:: yaml datamartQueryEstimation: schemaFormat: 'application/vnd.apache.avro;version=1.9.0' type: record name: Estimation namespace: datamart.query fields: - name: requestId description: Уникальный идентификатор запроса type: type: string logicalType: uuid - name: subRequestId description: Уникальный идентификатор подзапроса type: type: string logicalType: uuid - name: estimatedRowCount description: Оценка количества строк результата выполнения запроса type: long - name: estimatedSize description: Оценка объема результата выполнения запроса, в байтах type: long - name: estimatedTime description: Оценка времени выполнения запроса в миллисекундах type: long examples: - requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14 subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe estimatedRowCount: 100 estimatedSize: 1000 estimatedTime: 50