HTTP-интерфейс

HTTP-интерфейс позволяет использовать ADQM на любой платформе и из любого языка программирования.
По умолчанию Clickhouse-server слушает HTTP через порт 8123 (это можно изменить в конфиге). Если запросить GET / без параметров, то вернётся строка, заданная с помощью настройки http_server_default_response. Значение по умолчанию «Ok.» (с переводом строки на конце).
Пример
$ curl 'http://localhost:8123/'
Ok.
Веб-интерфейс доступен по адресу: http://localhost:8123/play.
В скриптах проверки доступности можно использовать GET /ping без параметров. Если сервер доступен, всегда возвращается «Ok.» (с переводом строки на конце).
Пример
$ curl 'http://localhost:8123/ping'
Ok.
Возмжные способы отправки запроса:
  • в виде URL-параметра с именем query;
  • как тело запроса при использовании метода POST;
  • как начало запроса в URL-параметре query, а продолжение POST-запросом.
Размер URL ограничен 16KB, это следует учитывать при отправке больших запросов.
В случае успеха возвращается код ответа 200 и результат обработки запроса в теле ответа, в случае ошибки — код ответа 500 и текст с описанием ошибки в теле ответа.
При использовании метода GET выставляется настройка readonly. То есть, для запросов, модифицирующих данные, можно использовать только метод POST. Сам запрос при этом можно отправлять как в теле POST-запроса, так и в параметре URL.
Примеры
$ curl 'http://localhost:8123/?query=SELECT%201'
1

$ wget -nv -O- 'http://localhost:8123/?query=SELECT 1'
1

$ echo -ne 'GET /?query=SELECT%201 HTTP/1.0\r\n\r\n' | nc localhost 8123
HTTP/1.0 200 OK
Date: Wed, 27 Nov 2019 10:30:18 GMT
Connection: Close
Content-Type: text/tab-separated-values; charset=UTF-8
X-Clickhouse-Server-Display-Name: Clickhouse.ru-central1.internal
X-Clickhouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
X-Clickhouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
Можно указать любой другой формат с помощью секции запроса FORMAT.
Чтобы указать формат по умолчанию, отличный от TabSeparated, можно использовать параметр URL-адреса default_format или заголовок X-Clickhouse-Format.
Пример
$ echo 'SELECT 1 FORMAT Pretty' | curl
'http://localhost:8123/?' --data-binary @-
Возможность передавать данные с помощью POST нужна для запросов INSERT. В этом случае можно написать начало запроса в параметре URL, а вставляемые данные передать POST-запросом. Вставляемыми данными может быть, например, tab-separated дамп, полученный из MySQL. Таким образом, запрос INSERT заменяет LOAD DATA LOCAL INFILE из MySQL.
Создание таблицы:
$ echo 'CREATE TABLE t (a UInt8) ENGINE = Memory' | curl 'http://localhost:8123/' --data-binary @-
Вставка данных (запрос INSERT):
$ echo 'INSERT INTO t VALUES (1),(2),(3)' | curl 'http://localhost:8123/' --data-binary @-
Отправка данных (отдельно от запроса):
$ echo '(4),(5),(6)' | curl 'http://localhost:8123/query=INSERT%20INTO%20t%20VALUES' --data-binary @-
Можно указать любой формат для данных. Формат Values - то же, что используется при записи INSERT INTO t VALUES:
$ echo '(7),(8),(9)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20Values' --data-binary @-
Можно вставить данные из tab-separated дампа, указав соответствующий формат:
$ echo -ne '10\n11\n12\n' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20TabSeparated' --data-binary @-
Чтение содержимого таблиц (данные выводятся в произвольном порядке из-за параллельной обработки запроса):
$ curl 'http://localhost:8123/?query=SELECT%20a%20FROM%20t'
Удаление таблицы:
$ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @-
Для запросов, которые не возвращают таблицу с данными, в случае успеха выдаётся пустое тело ответа.
Предыдущий раздел
Интерфейс gRPC
Следующий раздел
Движки баз данных
Была ли страница полезной?