REST API клиента Trino#
REST API позволяет клиентам отправлять SQL-запросы в Trino и получать результаты. К клиентам относятся CLI, JDBC-драйвер и другие решения, предоставляемые сообществом. Предпочтительный способ взаимодействия с Trino — использование этих существующих клиентов. Этот документ содержит справочные сведения по API. При необходимости его также можно использовать для реализации собственного клиента.
Дополнительную информацию о драйверах, клиентских приложениях и настройке клиентского протокола смотрите в документации по клиентам.
HTTP-методы#
POSTна/v1/statementвыполняет строку запроса из телаPOSTи возвращает JSON-документ с результатами запроса. Если есть дополнительные результаты, JSON-документ содержит URL-атрибутnextUri.GETпо адресу из атрибутаnextUriвозвращает следующую порцию результатов.DELETEнаnextUriзавершает выполняющийся запрос.
Обзор обработки запроса#
Клиентский запрос к Trino инициируется HTTP-запросом POST к endpoint
/v1/statement, где тело POST содержит строку SQL-запроса. Вызывающая
сторона может установить различные Заголовки клиентского запроса. Заголовки
требуются только в начальном запросе POST, но не при последующих переходах
по ссылкам nextUri.
Если клиентский запрос возвращает HTTP 502, 503 или 504, это означает, что возникла временная проблема при обработке запроса, и клиенту следует повторить запрос через 50-100 мс. Trino сам не генерирует эти коды, но их могут генерировать балансировщики нагрузки перед Trino.
Кроме того, если запрос возвращает код статуса 429, клиент должен повторить
запрос, используя значение заголовка Retry-After.
Любой HTTP-статус, отличный от 502, 503, 504 или 200, означает, что обработка запроса завершилась неудачно.
Запрос /v1/statement POST возвращает JSON-документ типа
QueryResults, а также набор заголовков ответа. Документ QueryResults
содержит поле error типа QueryError, если запрос завершился ошибкой.
Если этот объект отсутствует, запрос выполнен успешно. Важные аспекты
QueryResults описаны в следующих разделах.
Если в JSON-документе установлено поле data, оно содержит список строк
данных. Поле columns содержит список имен и типов столбцов, возвращенных
запросом. Большинство заголовков ответа обрабатываются клиентом как cookie
браузера и передаются обратно в виде заголовков запроса в последующих
запросах, как описано ниже.
Если JSON-документ, возвращенный POST к /v1/statement, не содержит
ссылку nextUri, значит запрос завершен — успешно или с ошибкой — и
дополнительные запросы не требуются. Если ссылка nextUri присутствует,
остаются дополнительные результаты, которые нужно получить. Клиент должен
в цикле выполнять GET по nextUri, возвращенному в объекте ответа
QueryResults, пока nextUri не исчезнет из ответа.
Поле status в JSON-документе предназначено только для человека и дает
подсказку о состоянии запроса. Его нельзя использовать для определения того,
завершен ли запрос.
Важные атрибуты QueryResults#
Наиболее важные атрибуты JSON-документа QueryResults, возвращаемого
endpoint-ами REST API, перечислены в этой таблице. Дополнительные сведения
см. в классе io.trino.client.QueryResults из модуля trino-client в
каталоге client исходного кода Trino.
Attribute |
Description |
|---|---|
|
Идентификатор запроса. |
|
Если присутствует, URL для последующих запросов |
|
Список имен и типов столбцов, возвращенных запросом. |
|
Атрибут |
|
Человекочитаемая строка, представляющая операцию. Для запроса
|
|
Если запрос завершился ошибкой, атрибут |
Диагностические атрибуты QueryResults#
Эти поля QueryResults могут быть полезны при поиске причин проблем:
Attribute |
Type |
Description |
|---|---|---|
|
|
Не равен null только если запрос завершился ошибкой. |
|
|
|
|
|
Обычно пустой список предупреждений. |
|
|
Класс, содержащий статистику выполнения запроса. Особый интерес
представляет |
Заголовки клиентского запроса#
Эта таблица перечисляет все поддерживаемые заголовки клиентского запроса. Многие из этих заголовков могут обновляться клиентом по заголовкам ответа и передаваться в следующих запросах, как cookie браузера.
Header name |
Description |
|---|---|
|
Задает пользователя сессии. Если не указан, пользователь сессии автоматически определяется через Сопоставление пользователей. |
|
Задает исходного пользователя сессии. |
|
Для целей отчетности задает имя ПО, отправившего запрос. |
|
Контекст каталога для обработки запроса. Устанавливается заголовком
ответа |
|
Контекст схемы для обработки запроса. Устанавливается заголовком
ответа |
|
Часовой пояс для обработки запроса. По умолчанию используется часовой пояс кластера Trino, а не часовой пояс клиента. |
|
Язык, используемый при обработке запроса и форматировании результатов,
в формате строки Java |
|
Передает trace token в движок Trino, чтобы проще находить строки логов, относящиеся к этому запросу. |
|
Передает список пар name=value, разделенных запятыми, как свойства
сессии. Когда клиент Trino выполняет запрос |
|
Устанавливает “role” для обработки запроса. “role” представляет набор
разрешений. Устанавливается заголовком ответа |
|
Список пар name=value, разделенных запятыми, где имена — это имена ранее подготовленных SQL-выражений, а значения — ключи, идентифицирующие исполняемую форму соответствующих подготовленных выражений. |
|
Идентификатор транзакции, используемый для обработки запроса.
Устанавливается заголовком ответа |
|
Содержит произвольную информацию о клиентской программе, отправляющей запрос. |
|
Список строковых “tag”, разделенных запятыми, используемых для идентификации resource groups Trino. |
|
Список присваиваний вида |
|
Передает дополнительные учетные данные в коннектор. Заголовок — это строка
name=value, которая сохраняется в объекте сессии |
Заголовки клиентского ответа#
Эта таблица перечисляет поддерживаемые заголовки клиентского ответа. После получения ответа клиент должен обновить заголовки запроса, используемые в последующих запросах, в соответствии с полученными заголовками ответа.
Header name |
Description |
|---|---|
|
Указывает клиенту установить каталог в заголовке запроса
|
|
Указывает клиенту установить схему в заголовке запроса
|
|
Указывает клиенту установить пользователя авторизации сессии в заголовке
запроса |
|
Указывает клиенту сбросить заголовок запроса |
|
Указывает клиенту установить роли исходного пользователя в заголовке
запроса |
|
Значение заголовка ответа |
|
Указывает клиенту удалить свойство сессии, имя которого является значением
заголовка |
|
Указывает клиенту установить заголовок запроса |
|
Указывает клиенту добавить пару name=value в набор подготовленных
выражений в заголовке запроса |
|
Указывает клиенту удалить подготовленное выражение, имя которого является
значением заголовка |
|
Передает идентификатор транзакции, который клиент должен возвращать
в заголовке запроса |
|
Указывает клиенту очистить заголовок запроса |
ProtocolHeaders#
Класс io.trino.client.ProtocolHeaders в модуле trino-client в каталоге
client исходного кода Trino перечисляет все HTTP-заголовки запроса и ответа,
разрешенные клиентским REST API Trino.