Установка и clickhouse-client

Поднимаем ClickHouse за пару команд и пробуем первые запросы.

clickhouse-client — консольный клиент для интерактивной работы с сервером ClickHouse: вводите SQL, получаете результат в терминале.

Самый быстрый старт — Docker

Если у вас установлен Docker, поднять сервер можно одной командой:

# Запускаем сервер ClickHouse в фоне
docker run -d --name ch-server \
  -p 8123:8123 -p 9000:9000 \
  clickhouse/clickhouse-server

Порт 9000 — нативный протокол (для clickhouse-client), порт 8123 — HTTP-интерфейс (для curl и приложений).

Подключаемся клиентом

# Запускаем клиент внутри того же контейнера
docker exec -it ch-server clickhouse-client

После подключения появится приглашение, и можно вводить SQL:

SELECT version();
SELECT now();
SELECT 2 + 2 AS answer;

Запросы по HTTP через curl

ClickHouse умеет отвечать на обычные HTTP-запросы — удобно для скриптов и проверки доступности:

# Простой запрос — данные в теле GET
curl 'http://localhost:8123/?query=SELECT%201'

# Запрос через POST (для длинных/многострочных)
curl 'http://localhost:8123/' --data-binary 'SELECT version()'

В ответ придёт результат текстом. По умолчанию формат — TSV (значения через табы), но его можно менять через FORMAT.

Форматы вывода

ClickHouse поддерживает десятки форматов — это одна из его удобных черт. Допишите FORMAT в конце запроса:

SELECT 1 AS a, 'hi' AS b FORMAT JSON;
SELECT 1 AS a, 'hi' AS b FORMAT CSV;
SELECT 1 AS a, 'hi' AS b FORMAT Pretty;

Pretty рисует таблицу рамками в терминале, JSON/CSV удобны для программ.

Как работает под капотом

Сервер ClickHouse — единый процесс, слушающий несколько портов: нативный бинарный протокол (быстрый, для клиента и кластера) и HTTP (универсальный, для всего остального). Клиент и сервер могут быть на разных машинах; в учебных целях оба живут в одном контейнере.

Частые ошибки

  • Забыть пробросить порты. Без -p 8123:8123 -p 9000:9000 снаружи к серверу не подключиться.
  • Путать порты. 9000 — для clickhouse-client, 8123 — для curl/HTTP. Подключение «не тем» портом даёт невнятные ошибки.
  • Слать многострочные запросы через GET. Для больших запросов используйте POST с --data-binary.

Итоги

  • Docker — самый простой способ поднять ClickHouse локально.
  • clickhouse-client (порт 9000) — для интерактивной работы.
  • HTTP-интерфейс (порт 8123) — для curl, скриптов и приложений.
  • FORMAT управляет тем, как выводится результат.
Проверьте себя
1. Какой порт по умолчанию использует clickhouse-client (нативный протокол)?
A80
B8123
C9000
D5432
2. Как через HTTP отправить длинный многострочный запрос?
AТолько через GET в адресной строке
BЧерез POST с флагом --data-binary
CЭто невозможно по HTTP
DЧерез FTP