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

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

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

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

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

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

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