Настройка OpenAPI connector
Для настройки коннектора используются параметры, описанные в данной статье.
Эти параметры можно указать при создании нового Trino-каталога с помощью ADCM или внутри предложения WITH, например:
CREATE CATALOG "openapi-catalog" USING openapi
WITH (
    "spec-location" = ...,
    "base-uri" = ...,
    ...
);| Параметр | Описание | 
|---|---|
| spec-location | URL или имя файла, содержащего схему OpenAPI (JSON/YAML) | 
| base-uri | Базовый URL REST API | 
| Тип аутентификации по умолчанию, который будет использоваться, если таковой не указан в схеме OpenAPI.
Возможные значения:  | |
| authentication.scheme | Схема аутентификации для типа аутентификации  | 
| authentication.client-id | OAuth Client ID | 
| authentication.client-secret | OAuth Client secret | 
| authentication.username | Имя пользователя для типов аутентификации  | 
| authentication.password | Пароль для типов аутентификации  | 
| authentication.bearer-token | Bearer-токен для аутентификации  | 
| authentication.api-key-name | Имя ключа API | 
| authentication.api-key-value | Значение ключа API | 
| max-requests-per-second | Максимальное количество HTTP-запросов в секунду, которые могут быть отправлены с одного узла Trino | 
| max-splits-per-second | Максимальное количество сплитов (split) в секунду, генерируемых при выполнении запроса | 
Под капотом коннектор использует Airlift HTTP client, который поддерживает свой собственный набор параметров, например:
openApi.http-client.log.enabled=true
openApi.http-client.log.path=logsПодробная информация о настройке клиента доступна на Github-странице проекта.
Распаковка массивов
При анализе HTTP-ответов от API коннектор может автоматически "распаковывать" поля с массивами. Например, коннектор получает следующий HTTP-ответ:
{
    "transactions_count": 10,
    "items":
    [
        {
            "txn_id": 1,
            "acc_id": 1002,
            "txn_value": 184.0,
            "txn_type": "withdrawal"
        },
        {
            "txn_id": 2,
            "acc_id": 1000,
            "txn_value": 282.95,
            "txn_type": "spb"
        },
        {
            "txn_id": 3,
            "acc_id": 1001,
            "txn_value": 100.00,
            "txn_type": "deposit"
        }
    ]
}По умолчанию Trino преобразует поле items в одну строку таблицы, содержащую все элементы массива:
total_count|                                        items|
-----------+---------------------------------------------+
         10|[{"txn_id": 1, ...}, {"txn_id": 1, ...}, ...]|Чтобы Trino "развернул" такой массив и представил его содержимое клиенту в виде отдельной таблицы, укажите блок x-unwrap в OpenAPI-схеме.
Например, для вышеуказанного HTTP-ответа блок x-unwrap выглядит следующим образом:
 /transactions_batch:
    get:
      summary: Get Transactions Batch
      operationId: get_transactions_batch_transactions_batch_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionBatch'
      x-unwrap:
        resultParam: $response.body#/items (1)
        includeRoot: 'false' (2)| 1 | Поле HTTP-ответа, содержащее массив, который необходимо развернуть и отобразить в виде отдельной таблицы. | 
| 2 | Указывает, следует ли включать дублирующиеся поля ( transactions_count). | 
При такой конфигурации x-unwrap коннектор преобразует содержимое поля items в отдельную таблицу:
txn_id|acc_id|txn_value|txn_type  |
------+------+---------+----------+
     1|  1002|184.00   |withdrawal|
     2|  1000|282.95   |spb       |
     3|  1001|100.00   |deposit   |Пагинация
Коннектор поддерживает пагинацию для pushdown-предиката LIMIT.
Чтобы активировать пагинацию, укажите блок x-pagination на нужном эндпойнте в схеме OpenAPI:
x-pagination:
  pageParam: "page"
  limitParam: "size"
  resultsPath: "$response.body#/elements"
  totalResultsPath: "$response.body#/totalCount"Использование пагинации не рекомендуется, так как это может привести к некорректным результатам, особенно при работе с большими наборами данных.