Настройка конечных точек API для запросов
Функция Query API Endpoints позволяет создавать конечные точки API напрямую из любого сохранённого SQL‑запроса в консоли ClickHouse Cloud. Вы сможете обращаться к конечным точкам API по HTTP, чтобы выполнять сохранённые запросы, не подключаясь к вашему сервису ClickHouse Cloud с использованием нативного драйвера.
Предварительные требования
Прежде чем продолжить, убедитесь, что у вас есть:
- Ключ API с соответствующими правами доступа
- Роль Admin Console
Вы можете воспользоваться этим руководством, чтобы создать ключ API, если у вас его еще нет.
Чтобы выполнять запросы к API endpoint, ключ API должен иметь роль организации Member с доступом к сервису Query Endpoints. Роль базы данных настраивается при создании endpoint.
Создание сохраненного запроса
Если у вас уже есть сохраненный запрос, вы можете пропустить этот шаг.
Откройте новую вкладку запроса. В демонстрационных целях мы будем использовать набор данных youtube, который содержит примерно 4,5 миллиарда записей. Следуйте шагам из раздела "Создание таблицы", чтобы создать таблицу в вашем облачном сервисе и вставить в нее данные.
LIMITВ учебном примере с набором данных вставляется большой объем данных — 4,65 миллиарда строк, что может занять некоторое время.
Для целей данного руководства мы рекомендуем использовать оператор LIMIT, чтобы вставить меньший объем данных,
например 10 миллионов строк.
В качестве примерного запроса мы вернем 10 лучших авторов по среднему количеству просмотров на видео за указанный пользователем параметр year.
Обратите внимание, что этот запрос содержит параметр (year), который выделен в приведенном выше фрагменте.
Вы можете указывать параметры запроса, используя фигурные скобки { } вместе с указанием типа параметра.
Редактор запросов SQL console автоматически обнаруживает выражения параметров запроса ClickHouse и предоставляет поле ввода для каждого параметра.
Быстро запустим этот запрос, чтобы убедиться, что он работает, указав год 2010 в поле ввода переменных запроса в правой части редактора SQL:

Затем сохраните запрос:

Дополнительную документацию по сохраненным запросам можно найти в разделе "Сохранение запроса".
Настройка Query API endpoint
Query API endpoints можно настраивать непосредственно из представления запроса, нажав кнопку Share и выбрав API Endpoint.
Вам будет предложено указать, какие ключи API должны иметь доступ к этому endpoint:

После выбора ключа API вам будет предложено:
- Выбрать роль базы данных, которая будет использоваться для выполнения запроса (
Full access,Read onlyилиCreate a custom role) - Указать разрешенные домены для совместного использования ресурсов между источниками (CORS)
После выбора этих параметров Query API endpoint будет автоматически создан.
Будет показана примерная команда curl, с помощью которой вы можете отправить тестовый запрос:

Команда curl, отображаемая в интерфейсе, приведена ниже для удобства:
Параметры Query API
Параметры в запросе могут быть заданы с помощью синтаксиса {parameter_name: type}. Эти параметры будут автоматически обнаружены, а пример тела запроса будет содержать объект queryVariables, через который вы сможете передавать эти параметры.
Тестирование и мониторинг
После создания Query API endpoint вы можете протестировать его работу, используя curl или любой другой HTTP‑клиент:

После того как вы отправите первый запрос, сразу справа от кнопки Share должна появиться новая кнопка. При нажатии она откроет выезжающую панель, содержащую данные мониторинга по этому запросу:

Подробности реализации
Этот endpoint выполняет запросы к вашим сохранённым endpoint'ам Query API. Он поддерживает несколько версий, гибкие форматы ответа, параметризованные запросы и опциональные потоковые ответы (только для версии 2).
Endpoint:
HTTP-методы
| Method | Use Case | Parameters |
|---|---|---|
| GET | Простые запросы с параметрами | Передавайте переменные запроса через параметры URL (?param_name=value) |
| POST | Сложные запросы или при использовании тела запроса | Передавайте переменные запроса в теле запроса (объект queryVariables) |
Когда использовать GET:
- Простые запросы без сложных вложенных данных
- Параметры можно легко закодировать в URL
- Преимущества кэширования благодаря семантике HTTP GET
Когда использовать POST:
- Сложные переменные запроса (массивы, объекты, длинные строки)
- Когда для целей безопасности/конфиденциальности предпочтительно тело запроса
- Потоковая загрузка файлов или больших объёмов данных
Аутентификация
Обязательно: Да
Метод: Базовая аутентификация (Basic Auth) с использованием OpenAPI Key/Secret
Права доступа: Необходимые права для конечной точки запроса
Конфигурация запроса
Параметры URL
| Параметр | Обязательно | Описание |
|---|---|---|
queryEndpointId | Да | Уникальный идентификатор конечной точки запроса для выполнения |
Параметры запроса
| Параметр | Обязательно | Описание | Пример |
|---|---|---|---|
format | Нет | Формат ответа (поддерживаются все форматы ClickHouse) | ?format=JSONEachRow |
param_:name | Нет | Переменные запроса, когда тело запроса передаётся потоком. Замените :name на имя вашей переменной | ?param_year=2024 |
:clickhouse_setting | Нет | Любая поддерживаемая настройка ClickHouse | ?max_threads=8 |
Заголовки
| Header | Required | Description | Values |
|---|---|---|---|
x-clickhouse-endpoint-version | No | Указывает версию конечной точки | 1 или 2 (по умолчанию используется последняя сохранённая версия) |
x-clickhouse-endpoint-upgrade | No | Инициирует обновление версии конечной точки (используйте с заголовком версии) | 1 для обновления |
Тело запроса
Параметры
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
queryVariables | object | Нет | Переменные, которые будут использованы в запросе |
format | string | Нет | Формат ответа |
Поддерживаемые форматы
| Версия | Поддерживаемые форматы |
|---|---|
| Version 2 | Все форматы, поддерживаемые ClickHouse |
| Version 1 (limited) | TabSeparated TabSeparatedWithNames TabSeparatedWithNamesAndTypes JSON JSONEachRow CSV CSVWithNames CSVWithNamesAndTypes |
Ответы
Успешный ответ
Статус: 200 OK
Запрос был успешно выполнен.
Коды ошибок
| Код статуса | Описание |
|---|---|
400 Bad Request | Некорректный запрос |
401 Unauthorized | Отсутствует аутентификация или недостаточно прав |
404 Not Found | Указанная конечная точка запроса не найдена |
Рекомендации по обработке ошибок
- Убедитесь, что в запрос включены корректные аутентификационные данные
- Проверьте
queryEndpointIdиqueryVariablesперед отправкой - Реализуйте корректную обработку ошибок с информативными сообщениями
Обновление версий конечных точек
Чтобы обновить версию с 1 до 2:
- Добавьте заголовок
x-clickhouse-endpoint-upgradeсо значением1 - Добавьте заголовок
x-clickhouse-endpoint-versionсо значением2
Это даёт доступ к возможностям версии 2, таким как:
- Поддержка всех форматов ClickHouse
- Возможность потоковой передачи ответа
- Повышенная производительность и функциональность
Примеры
Базовый запрос
SQL конечной точки Query API:
Версия 1
- cURL
- JavaScript
Версия 2
- GET (cURL)
- POST (cURL)
- JavaScript
Запрос с параметрами и версией 2 в формате JSONCompactEachRow
SQL конечной точки Query API:
- GET (cURL)
- POST (cURL)
- JavaScript
Запрос с массивом в переменных запроса для вставки данных в таблицу
SQL таблицы:
SQL конечной точки Query API:
- cURL
- JavaScript
Запрос с настройкой ClickHouse max_threads, установленной на 8
SQL конечной точки Query API:
- GET (cURL)
- POST (cURL)
- JavaScript
Запрос и обработка ответа в виде потока
SQL конечной точки Query API:
- TypeScript
Вставка потока из файла в таблицу
Создайте файл ./samples/my_first_table_2024-07-11.csv со следующим содержимым:
SQL создания таблицы:
SQL конечной точки Query API: