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