'dmsquery' capability для WebSocket Token API
Обзор
Предоставляет интерфейс для выполнения произвольных SQL запросов Select в БД postgresql, где размещаются модельные данные указанного класса (либо явно заданного в хранилищах).
Является проектным инструментом для построения специфических отчетов с пересечениями (JOIN).
| Этот механизм является именно адаптационным, а не общим. Поскольку в общем случае различные классы могут размещать данные в разных БД, а для построения выборок с пересечениями нужны размещенные в разных хранилищах данные. К тому же таблицы с данными классов имеют специфические названия. Поэтому использование этого механизма создает проблемы дальнейшей модифицируемости и тиражируемости пакетов. |
Использует доступ к хранилищу с идентичным именем и постфиксом '_readonly', предполагающим доступ к БД из под учетной записи пользователя, имеющего только право на чтение. Если такого хранилища не обнаружено, то система делает попытку создать учетную запись пользователя с правом только на чтение, для чего основной учетной записи необходим полный доступ. В случае неудачи запрос завершается ошибкой.
Если данные различных классов, необходимые для построения выборки данных, распределены по нескольким различным БД, то необходимо проектными средствами обеспечить их присутствие в одной БД. Для этого может пригодиться настойка ETL (копии коллекций), dblink или другие способы.
С учетом того, что в больших распределенных системах архивные данные вероятнее всего размещены в Clickhouse, такие запросы к postgresql будут лишены возможности обращаться к архивам.
В перспективе метод будет расширен до обращения к Clickhouse, и тогда средствами предварительной обработки и ETL необходимо будет размещать там же рядом таблицы конечных категорий, значения которых будут необходимы для построения выборок. А синтаксис SQL-запроса должен соответствовать clickhouse.
[
"dmsquery",
{
"qid": 0.1234,
"classpath": "/rest/v1/model/SomeClass",
"timeout": 20000,
"storageInstance": "auto",
"sqlText": "Select id as i, name From SomeSchema.SomeTable"
}
]
[
"dmsquery_result",
{
"qid": 0.1234,
"result": ok,
"content": [
{
"i": ...,
"name": ...
},
{
"i": ...,
"name": ...
},
...
]
}
]