query.estimation.rs
Топик QUERY.ESTIMATION.RS предоставляет возможность произвести предварительную оценку объема получаемых данных при выполнении запроса к Витрине данных, а также, ограничить выгрузку данных в случае, если количество получаемых данных превысит заданное количество строк (параметр rowCountThreshold). В этом случае, ответом на запрос будет предварительная оценка объема.
Например, если вам нужна информация из какой-либо таблицы контактов, то, возможно, следует предварительно узнать, какой объем данных вы можете получить на такой запрос т.к ответ может содержать несколько гигабайт информации и выполнение запроса может занять много времени. Вы сможете установить ограничение на получение данных, например, не более 10 контактов из таблицы. В этом случае, если ответом на запрос будет 5 контактов, то Витрина предоставит ответ полностью. Если ответом будет 1000 контактов, то в качестве ответа будет сформирована предварительная оценка такого ответа, а именно, что данный ответ будет содержать 1000 строк и содержать информацию, например, на 15000 байт. Используя топик query.estimation.rs можно прогнозировать объем получаемых данных, в соответствии с которыми оптимизировать запросы к Витрине.
В случае использования топика query.estimation.rs запрашивается не конечный ответ на запрос, а приблизительная оценка объема (байт) и количество строк в ответе.
Примечание
Данное требование не распространяется на механизм подписок Потребителей данных ПОДД.
Алгоритм работы query.estimation.rs
Витрина получает запрос query.rq с признаком
isForEstimationоценивает объем результата по этому запросу (в байтах и количестве строк).Витрина сравнивает результаты оценки объема запроса со значением предельного числа строк в параметре
rowCountThreshold(топик query.rq).Если значение в оценке меньше, чем предельное значение в
rowCountThreshold, то Витрина возвращает результат запроса в качестве ответа в топик query.rs.Если значение оценки превышает предельное значение, возвращает предварительную оценку объема в качестве ответа.
Структура сообщения
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-схема сообщения
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