8. Спецификация Модуля исполнения запросов
8.1. Запрос данных из Витрины
Данная спецификация описывает возможность запроса данных к Витрине, получения успешного ответа на запрос или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
8.1.1. query.rq
query.rq - Топик sql запросов на исполнение
Структура сообщения
datamartExecuteQueryRequestMessage:
description: Исполнение sql запроса на витрине
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
MESSAGE_TYPE:
description: Тип сообщения
type: string
const: DatamartExecuteQueryRequest:0.1
REQUEST_ID:
description: Идентификатор запроса
type: string
QUERY_DEADLINE:
description: Время в миллисекундах от эпохи, до которого запрос должен быть выполнен
type: string
format: int64
AGENT_CONSUMER_ID:
description: Мнемоника потребителя (мнемоника агента)
type: string
QUERY_MNEMONIC:
description: '<Полная мнемоника РЗ>.<версия РЗ>'
type: string
payload:
$ref: '#/components/schemas/datamartExecuteQueryRequest'
examples:
- name: simple
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: aaa
customerOgrn: ""
queryMnemonic: fias.selectAllAddrobj.1.0
- name: estimation
summary: Запрос на оценку
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 403eada5-05f6-480c-bca9-03328091efeb
subRequestId: 451000b8-dff2-4a1b-ab1b-42500a70d232
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: true
rowCountThreshold: 1000
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAllAddrobj.1.0
- name: complex
summary: Запрос с параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 68758a92-0027-4258-bf17-aa3d24f85094
subRequestId: 96e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj where oktmo = ? and name = @tbl.fullname
parameters:
- type: STRING
value:
string: asdasdasd
- type: LONG
value: null
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: complex_named
summary: Запрос с именованными параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 12358a92-0027-4258-bf17-aa3d24f85094
subRequestId: 56e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from @tbl.fullname el LEFT JOIN v1_addrobj where oktmo = @p1 and kod = @p2
parameters: [ ]
namedParams:
- name: p1
type: STRING
value:
string: asdasdasd
- name: p2
type: LONG
value: null
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: deadline
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
QUERY_DEADLINE: 1629289006904
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: agent-fias
customerOgrn: "1053600591197"
queryMnemonic: fias.selectAllWithDeadline.1.0
Avro-схема сообщения
datamartExecuteQueryRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryRequest
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Ответ, формируемый витриной, обязан содержать переданное значение без каких либо искажений
type: string
- name: datamartMnemonic
description: Мнемоника витрины, к которой выполняется запрос
type: string
- name: sql
description: SQL запрос на исполнение, либо имя хранимой процедуры для регламентированных запросов
type: string
- name: parameters
description: Параметры к SQL запросу
default: [ ]
type:
type: array
items:
type: record
name: QueryParameter
description: Описание параметра
fields:
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: namedParams
description: Именованные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: NamedParam
description: Описание именованного параметра
fields:
- name: name
description: Имя (мнемоника) параметра
type: string
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: tableParams
description: Табличные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: TableParam
fields:
- name: id
description: Уникальный идентификатор
type:
type: string
logicalType: uuid
- name: name
description: Имя параметра
type: string
- name: columns
description: Описание колонок таблицы
type:
type: array
items:
type: record
description: Описание колонки
name: TableParamColumnInfo
fields:
- name: name
type: string
description: Имя колонки
- name: type
type: string
description: Тип атрибута
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: isForEstimation
description: Признак необходимости вернуть статистику по запросу в качестве результата. В случае, если оценка по результату исполнения sql запроса не превышает rowCountThreshold записей, должен сразу отдаваться результат без отправки оценки в ядро
type: boolean
default: false
- name: rowCountThreshold
description: Максимальное оценочное количество строк результата, при превышении которого возвращается статистика по запросу. Если оценка по запросу не превышет данный параметр, витрина сразу возвращает ответ с результатом. Заполняется в случае isForEstimation = true
type: long
default: -1
- name: customerId
description: Мнемоника ИС Потребителя
type:
- 'null'
- string
default: null
- name: customerOgrn
description: ОГРН ИС Потребителя
type:
- 'null'
- string
default: null
- name: queryMnemonic
description: 'Мнемоника РЗ, сформированная по правилу: <мнемоника витрины>.<мнемоника РЗ>.<версия РЗ> Если запрос распределенный, то формируется по правилу: podd.<мнемоника РЗ>.<версия РЗ>'
type:
- 'null'
- string
default: null
8.1.2. query.rs
query.rs - Топик c чанками данных исполнения запросов
Структура сообщения
datamartExecuteQueryResultChunkMessage:
description: Чанк с данными по исполнению запроса
contentType: 'application/octet-stream'
bindings:
kafka:
key:
$ref: '#/components/schemas/datamartExecuteQueryResultChunk'
headers:
type: object
properties:
MESSAGE_TYPE:
description: Тип сообщения
type: string
const: DatamartExecuteQueryResultChunk:0.1
payload:
description: Бинарные данные чанка
examples:
- name: base64
headers:
MESSAGE_TYPE: DatamartExecuteQueryResultChunk:0.1
payload:
value: JEEJNodyLO7p1pgsRHG9pEiXeYGvHW4YCl4FgrgBmu5C92iVX1PV2GZdcqsb66bx8sk=
Avro-схема сообщения
datamartExecuteQueryResultChunk:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryResultChunk
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Заполняется соответсвующим значением из запроса
type: string
- name: chunkNumber
description: Номер порции по порядку
type: int
minimum: 1
- name: isLastChunk
description: Признак последнего сообщения
type: boolean
- name: streamNumber
description: Номер стрима дланных
minimum: 1
type:
- int
- "null"
- name: streamTotal
description: Общее количество стримов
minimum: 1
type:
- int
- "null"
- name: isFragmented
description: Признак присутствия в чанке неполных строк (строк, которые были разбиты на несколько чанков)
type: boolean
- name: uncompressedSize
description: Признак присутствия в чанке неполных строк (строк, которые были разбиты на несколько чанков)
type: int
minimum: 0
examples:
- requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
chunkNumber: 1
isLastChunk: true
streamNumber:
int: 1
streamTotal:
int: 1
isFragmented: false
uncompressedSize: 10
8.1.3. query.err
query.err - Топик c ошибками исполнения sql запросов на витрине
Структура сообщения
datamartExecuteQueryErrorMessage:
description: Ошибка исполнения запроса
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
MESSAGE_TYPE:
description: Тип сообщения
type: string
const: DatamartExecuteQueryError:0.1
payload:
$ref: '#/components/schemas/datamartExecuteQueryError'
examples:
- name: error
summary: Сообщение с ошибкой исполенния запроса на витрине без header
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
errorCode: DATAMART-001
message: Непредвиденная ошибка
- name: errorWithHeader
summary: Сообщение с ошибкой исполенния запроса на витрине
headers:
MESSAGE_TYPE: DatamartExecuteQueryError:0.1
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
errorCode: DATAMART-001
message: Непредвиденная ошибка
Avro-схема сообщения
datamartExecuteQueryError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryError
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Заполняется соответсвующим значением из запроса
type: string
- name: errorCode
description: Код возникшей ошибки
type: string
- name: message
description: Сообщение с ошибкой исполнения
type: string
examples:
- requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
errorCode: DATAMART-001
message: Непредвиденная ошибка
8.1.4. 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
8.2. Отмена запроса данных
Данная спецификация описывает возможность отмены ранее отправленного запроса к Витрине, получения ответа об успешной отмене запроса или ошибки, с описанием возможной причины.
8.2.1. cancel.rq
cancel.rq - Топик с сообщениями об отмене исполнения запроса
Структура сообщения
datamartQueryCancellationRequestMessage:
description: Запрос на отмену исполнения
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/datamartQueryCancellationRequest'
examples:
- name: request
summary: Пример запроса на отмену
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
Avro-схема сообщения
datamartQueryCancellationRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: AgentQueryCancellationRequest
namespace: ru.rtlabs.common.query.cancel
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
8.2.2. cancel.rs
cancel.rs - Топик с ответами на отмену запроса
Структура сообщения
datamartCancelQuerySuccessMessage:
description: Ответ об успешной отмене запроса
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/datamartCancelQuerySuccess'
examples:
- name: success
summary: Пример запроса на отмену
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
isSuccess: true
Avro-схема сообщения
datamartCancelQuerySuccess:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DatamartCancelQuerySuccess
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: isSuccess
description: Признак успешного выполнения операции
type: boolean
8.2.3. cancel.err
cancel.err - Топик с ошибками по отмене запроса
Структура сообщения
datamartCancelQueryErrorMessage:
description: Ответ об успешной отмене запроса
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/datamartCancelQueryError'
examples:
- name: success
summary: Пример запроса на отмену
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
errorCode: DATAMART-001
message: Непредвиденная ошибка
Avro-схема сообщения
datamartCancelQueryError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DatamartCancelQueryError
namespace: datamart.query.cancel
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: errorCode
description: Код ошибки выполнения
type: string
- name: message
description: Сообщение об ошибке
type: string
8.3. Запрос оценки выполнения запроса на Витрине
Данная спецификация описывает возможность получения оценки выполнения запросов на Витрине.
8.3.1. query.rq
query.rq - Топик sql запросов на исполнение
Структура сообщения
datamartExecuteQueryRequestMessage:
description: Исполнение sql запроса на витрине
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
MESSAGE_TYPE:
description: Тип сообщения
type: string
const: DatamartExecuteQueryRequest:0.1
REQUEST_ID:
description: Идентификатор запроса
type: string
QUERY_DEADLINE:
description: Время в миллисекундах от эпохи, до которого запрос должен быть выполнен
type: string
format: int64
AGENT_CONSUMER_ID:
description: Мнемоника потребителя (мнемоника агента)
type: string
QUERY_MNEMONIC:
description: '<Полная мнемоника РЗ>.<версия РЗ>'
type: string
payload:
$ref: '#/components/schemas/datamartExecuteQueryRequest'
examples:
- name: simple
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: aaa
customerOgrn: ""
queryMnemonic: fias.selectAllAddrobj.1.0
- name: estimation
summary: Запрос на оценку
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 403eada5-05f6-480c-bca9-03328091efeb
subRequestId: 451000b8-dff2-4a1b-ab1b-42500a70d232
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: true
rowCountThreshold: 1000
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAllAddrobj.1.0
- name: complex
summary: Запрос с параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 68758a92-0027-4258-bf17-aa3d24f85094
subRequestId: 96e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj where oktmo = ? and name = @tbl.fullname
parameters:
- type: STRING
value:
string: asdasdasd
- type: LONG
value: null
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: complex_named
summary: Запрос с именованными параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 12358a92-0027-4258-bf17-aa3d24f85094
subRequestId: 56e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from @tbl.fullname el LEFT JOIN v1_addrobj where oktmo = @p1 and kod = @p2
parameters: [ ]
namedParams:
- name: p1
type: STRING
value:
string: asdasdasd
- name: p2
type: LONG
value: null
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: deadline
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
QUERY_DEADLINE: 1629289006904
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: agent-fias
customerOgrn: "1053600591197"
queryMnemonic: fias.selectAllWithDeadline.1.0
Avro-схема сообщения
datamartExecuteQueryRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryRequest
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Ответ, формируемый витриной, обязан содержать переданное значение без каких либо искажений
type: string
- name: datamartMnemonic
description: Мнемоника витрины, к которой выполняется запрос
type: string
- name: sql
description: SQL запрос на исполнение, либо имя хранимой процедуры для регламентированных запросов
type: string
- name: parameters
description: Параметры к SQL запросу
default: [ ]
type:
type: array
items:
type: record
name: QueryParameter
description: Описание параметра
fields:
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: namedParams
description: Именованные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: NamedParam
description: Описание именованного параметра
fields:
- name: name
description: Имя (мнемоника) параметра
type: string
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: tableParams
description: Табличные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: TableParam
fields:
- name: id
description: Уникальный идентификатор
type:
type: string
logicalType: uuid
- name: name
description: Имя параметра
type: string
- name: columns
description: Описание колонок таблицы
type:
type: array
items:
type: record
description: Описание колонки
name: TableParamColumnInfo
fields:
- name: name
type: string
description: Имя колонки
- name: type
type: string
description: Тип атрибута
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: isForEstimation
description: Признак необходимости вернуть статистику по запросу в качестве результата. В случае, если оценка по результату исполнения sql запроса не превышает rowCountThreshold записей, должен сразу отдаваться результат без отправки оценки в ядро
type: boolean
default: false
- name: rowCountThreshold
description: Максимальное оценочное количество строк результата, при превышении которого возвращается статистика по запросу. Если оценка по запросу не превышет данный параметр, витрина сразу возвращает ответ с результатом. Заполняется в случае isForEstimation = true
type: long
default: -1
- name: customerId
description: Мнемоника ИС Потребителя
type:
- 'null'
- string
default: null
- name: customerOgrn
description: ОГРН ИС Потребителя
type:
- 'null'
- string
default: null
- name: queryMnemonic
description: 'Мнемоника РЗ, сформированная по правилу: <мнемоника витрины>.<мнемоника РЗ>.<версия РЗ> Если запрос распределенный, то формируется по правилу: podd.<мнемоника РЗ>.<версия РЗ>'
type:
- 'null'
- string
default: null
8.3.2. 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
8.4. Запрос статистики
Данная спецификация описывает возможность запроса статистики Витрины.
8.4.1. statistics.rq
statistics.rq - Топик запросов статистики витрины
Структура сообщения
datamartStatisticRequestMessage:
description: Запрос статистики витрины
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
$ref: '#/components/schemas/datamartStatisticRequestKey'
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
payload:
$ref: '#/components/schemas/datamartStatisticRequest'
examples:
- name: simple
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
payload:
protocol: read.statistic.protocol.v.1
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
datamart:
mnemonic: fias
version:
major: 1
minor: 0
Avro-схема сообщения
datamartStatisticRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DatamartStatisticRequest
namespace: ru.rtlabs.common.statistic
fields:
- name: protocol
description: Версия протокола. Указывается константа read.statistic.protocol.v.1
type: string
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: datamart
description: Витрина
type:
type: record
name: DatamartInfo
fields:
- name: mnemonic
description: Мнемоника витрины
type: string
- name: version
description: Версия
type:
type: record
name: SemanticVersion
namespace: ru.rtlabs.common.model.metadata
fields:
- name: major
type: int
minimum: 1
- name: minor
type: int
minimum: 0
8.4.2. statistics.rs
statistics.rs - Топик со статистикой витрины
Структура сообщения
datamartStatisticResponseMessage:
description: Статистика витрины
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор запроса
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
payload:
$ref: '#/components/schemas/datamartStatisticResponse'
examples:
- name: simple
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
payload:
protocol: read.statistic.protocol.v.1
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
datamart:
mnemonic: fias
version:
major: 1
minor: 0
tables:
- mnemonic: addrobj
columns:
- mnemonic: oktmo
notGreater10: 10.0
inRange11And100: 50.0
inRange101And1000: 30.0
moreThan1000: 10.0
Avro-схема сообщения
datamartStatisticResponse:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DatamartStatisticResponse
namespace: ru.rtlabs.common.datamart.profile
fields:
- name: protocol
description: Версия протокола. Указывается константа read.statistic.protocol.v.1
type: string
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: datamart
description: Статистика по витрине
type:
type: record
name: DatamartStatistic
fields:
- name: mnemonic
description: Мнемоника витрины
type: string
- name: version
description: Версия
type:
type: record
name: SemanticVersion
namespace: ru.rtlabs.common.model.metadata
fields:
- name: major
type: int
minimum: 1
- name: minor
type: int
minimum: 0
- name: tables
type:
type: array
items:
type: record
name: TableStatistic
fields:
- name: mnemonic
description: Мнемоника витрины
type: string
- name: columns
description: Колонки
type:
type: array
items:
type: record
name: ColumnStatistic
description: Статистика по колонке
fields:
- name: mnemonic
type: string
- name: notGreater10
type: double
- name: inRange11And100
type: double
- name: inRange101And1000
type: double
- name: moreThan1000
type: double
8.4.3. statistics.err
statistics.err - Топик c ошибками получения статистики витрины
Структура сообщения
datamartStatisticErrorMessage:
description: Неуспешный результат обработки запроса на получение статистики
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор запроса
headers:
type: object
properties:
REQUEST_ID:
description: Идентификатор запроса
type: string
payload:
$ref: '#/components/schemas/datamartStatisticError'
examples:
- name: simple
headers:
REQUEST_ID: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
payload:
protocol: read.statistic.protocol.v.1
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
errorCode: DATAMART-001
message: Непредвиденная ошибка
Avro-схема сообщения
datamartStatisticError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DatamartStatisticError
namespace: ru.rtlabs.common.statistic
fields:
- name: protocol
type: string
description: Версия протокола. Указывается константа read.statistic.protocol.v.1
conts: read.statistic.protocol.v.1
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: errorCode
description: Код ошибки
type: string
- name: message
description: Сообщение об ошибке
type: string
8.5. Запрос данных по регламентированным запросам
Данная спецификация описывает возможность запроса данных по регламентированным запросам
8.5.1. procedure.query.rq
procedure.query.rq - Топик регламентированных запросов на исполнение
Структура сообщения
examples:
- name: simple
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: aaa
customerOgrn: ""
queryMnemonic: fias.selectAllAddrobj.1.0
- name: estimation
summary: Запрос на оценку
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 403eada5-05f6-480c-bca9-03328091efeb
subRequestId: 451000b8-dff2-4a1b-ab1b-42500a70d232
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: true
rowCountThreshold: 1000
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAllAddrobj.1.0
- name: complex
summary: Запрос с параметрами и табличными параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 68758a92-0027-4258-bf17-aa3d24f85094
subRequestId: 96e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj where oktmo = ? and name = @tbl.fullname
parameters:
- type: STRING
value:
string: asdasdasd
- type: LONG
value: null
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: complex_named
summary: Запрос с именованными параметрами
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
payload:
requestId: 12358a92-0027-4258-bf17-aa3d24f85094
subRequestId: 56e6eb99-7ff1-4efa-abae-ef1c5744b723
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from @tbl.fullname el LEFT JOIN v1_addrobj where oktmo = @p1 and kod = @p2
parameters: [ ]
namedParams:
- name: p1
type: STRING
value:
string: asdasdasd
- name: p2
type: LONG
value: null
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId:
string: agent-fias
customerOgrn:
string: "1053600591197"
queryMnemonic:
string: fias.selectAddrobjWithParams.1.0
- name: deadline
summary: Простой запрос на исполнение без параметров
headers:
MESSAGE_TYPE: DatamartExecuteQueryRequest:0.1
QUERY_DEADLINE: 1629289006904
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
datamartMnemonic: fias
sql: select * from v1_addrobj
parameters: [ ]
namedParams: [ ]
tableParams: [ ]
isForEstimation: false
rowCountThreshold: -1
customerId: agent-fias
customerOgrn: "1053600591197"
queryMnemonic: fias.selectAllWithDeadline.1.0
Avro-схема сообщения
datamartExecuteQueryRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryRequest
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Ответ, формируемый витриной, обязан содержать переданное значение без каких либо искажений
type: string
- name: datamartMnemonic
description: Мнемоника витрины, к которой выполняется запрос
type: string
- name: sql
description: SQL запрос на исполнение, либо имя хранимой процедуры для регламентированных запросов
type: string
- name: parameters
description: Параметры к SQL запросу
default: [ ]
type:
type: array
items:
type: record
name: QueryParameter
description: Описание параметра
fields:
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: namedParams
description: Именованные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: NamedParam
description: Описание именованного параметра
fields:
- name: name
description: Имя (мнемоника) параметра
type: string
- name: type
type: string
description: Тип параметра
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: value
description: Значение параметра
type:
- string
- 'null'
- name: tableParams
description: \use only Datamart\ Табличные параметры запроса
default: [ ]
type:
type: array
items:
type: record
name: TableParam
fields:
- name: id
description: Уникальный идентификатор
type:
type: string
logicalType: uuid
- name: name
description: Имя параметра
type: string
- name: columns
description: Описание колонок таблицы
type:
type: array
items:
type: record
description: Описание колонки
name: TableParamColumnInfo
fields:
- name: name
type: string
description: Имя колонки
- name: type
type: string
description: Тип атрибута
enum:
- BIG_DECIMAL
- BINARY
- BOOLEAN
- DATE
- DOUBLE
- FLOAT
- INTEGER
- LONG
- SHORT
- STRING
- TIME
- TIMESTAMP
- name: isForEstimation
description: Признак необходимости вернуть статистику по запросу в качестве результата. В случае, если оценка по результату исполнения sql запроса не превышает rowCountThreshold записей, должен сразу отдаваться результат без отправки оценки в ядро
type: boolean
default: false
- name: rowCountThreshold
description: Максимальное оценочное количество строк результата, при превышении которого возвращается статистика по запросу. Если оценка по запросу не превышет данный параметр, витрина сразу возвращает ответ с результатом. Заполняется в случае isForEstimation = true
type: long
default: -1
- name: customerId
description: Мнемоника ИС Потребителя
type:
- 'null'
- string
default: null
- name: customerOgrn
description: ОГРН ИС Потребителя
type:
- 'null'
- string
default: null
- name: queryMnemonic
description: 'Мнемоника РЗ, сформированная по правилу: <мнемоника витрины>.<мнемоника РЗ>.<версия РЗ> Если запрос распределенный, то формируется по правилу: podd.<мнемоника РЗ>.<версия РЗ>'
type:
- 'null'
- string
default: null
8.5.2. procedure.query.rs
procedure.query.rs - Топик c чанками данных исполнения запросов
Структура сообщения
datamartExecuteQueryResultChunk:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryResultChunk
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Заполняется соответсвующим значением из запроса
type: string
- name: chunkNumber
description: Номер порции по порядку
type: int
minimum: 1
- name: isLastChunk
description: Признак последнего сообщения
type: boolean
- name: streamNumber
description: Номер стрима данных
minimum: 1
type:
- int
- "null"
- name: streamTotal
description: Общее количество стримов
minimum: 1
type:
- int
- "null"
- name: isFragmented
description: Признак присутствия в чанке неполных строк (строк, которые были разбиты на несколько чанков)
type: boolean
- name: uncompressedSize
description: Оригинальный размер чанка в байтах
type: int
minimum: 0
Пример key query.rs
examples:
- requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
chunkNumber: 1
isLastChunk: true
streamNumber:
int: 1
streamTotal:
int: 1
isFragmented: false
uncompressedSize: 10
8.5.3. procedure.query.err
procedure.query.err - Топик c ошибками исполнения sql запросов на витрине
Структура сообщения
datamartExecuteQueryError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: QueryError
namespace: datamart.query
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
type:
type: string
logicalType: uuid
- name: replyTo
description: Служебная информация маршрутизации сообщения. Заполняется соответсвующим значением из запроса
type: string
- name: errorCode
description: Код возникшей ошибки
type: string
- name: message
description: Сообщение с ошибкой исполнения
type: string
Пример query.err
examples:
- name: error
summary: Сообщение с ошибкой исполнения запроса на витрине без header
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
errorCode: DATAMART-001
message: Непредвиденная ошибка
- name: errorWithHeader
summary: Сообщение с ошибкой исполнения запроса на витрине
headers:
MESSAGE_TYPE: DatamartExecuteQueryError:0.1
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId: 608c5a5a-01d4-4439-8220-dda41a8519fe
replyTo: agent-fias
errorCode: DATAMART-001
message: Непредвиденная ошибка
8.6. Запрос метаданных
Данная спецификация описывает возможность запроса метаданных Витрины
8.6.1. metadata.rq
Передача Агентом ПОДД запроса метаданных в Витрину.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId, не используется. |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"datamartMnemonic": {
"type": "string"
}
},
"required": [
"requestId",
"datamartMnemonic"
]
}
, где:
requestId - UUID запроса;
datamartMnemonic - мнемоника Витрины данных, к которой адресован запрос.
8.6.2. metadata.rs
Передача Агенту ПОДД ответа на запрос метаданных витрины из Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"metadata": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"datamart": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"datamartClassess": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"label": {
"type": "string"
},
"classAttributes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
},
"primaryKey": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"label",
"classAttributes",
"primaryKey"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"datamartClassess"
]
}
},
"required": [
"datamart"
]
}
]
}
},
"required": [
"requestId",
"metadata"
]
}
, где:
requestId- UUID запроса;metadata– описание структуры данных;datamart– описание витрины;id– UUID витрины (не используется);mnemonic– имя витрины;datamartClassess– список таблиц витрины;id– UUID таблицы (не используется);mnemonic– имя таблицы;label– не используется;classAttributes– список полей таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля;id– UUID типа данных (не используется);value– название типа данных;primaryKey– список полей, составляющих PK таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля;id– UUID типа данных (не используется);value– название типа данных.
8.6.3. metadata.err
Получение Агентом ПОДД ошибки при обработке запроса метаданных от Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"errorCode": {
"type": "string"
},
"msg": {
"type": "string"
}
},
"required": [
"requestId",
"errorCode",
"msg"
]
}
, где:
requestId- UUID запроса;errorCode– содержит константуINTERNAL;msg– описание ошибки.