'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": ...
      },
      ...
    ]
  }
]