Использование клиента командной строки ClickHouse — clickhouse-client
Для подключения к ADQM можно использовать стандартный консольный клиент ClickHouse — clickhouse-client. После установки ADQM clickhouse-client доступен на каждом сервере кластера. Чтобы начать с ним работу, необходимо выполнить следующую команду:
$ clickhouse-client
Эта команда осуществляет соединение с локальным сервером ADQM (localhost:9000
) от имени пользователя default
без пароля.
$ clickhouse-client ClickHouse client version 22.8.4.7. Connecting to localhost:9000 as user default. Connected to ClickHouse server version 22.8.4 revision 54460. :)
Чтобы подключиться к удаленному серверу ADQM или задать имя пользователя, пароль и базу данных, отличные от значений по умолчанию, можно использовать следующие параметры команды clickhouse-client
:
-
--host, -h
— имя хоста, на котором расположен сервер ADQM; -
--port
— порт для подключения; -
--user, -u
— имя пользователя, от имени которого выполняется подключение; -
--password
— пароль; -
--ask-password
— предложение пользователю ввести пароль; -
--database, -d
— текущая база данных. Если значение не указано, текущей будет база данных по умолчанию, которая создается при установке ADQM с помощью конфигурационного параметраDefault database
(ADQMDB → Other → Default database).
Клиент может использоваться в интерактивном или пакетном (batch) режиме.
Чтобы воспроизвести приведенные ниже примеры, создайте предварительно следующие таблицы:
-
test_table1
CREATE TABLE test_table1 (a Int32, b String, c Int32) ENGINE = MergeTree ORDER BY a;
INSERT INTO test_table1 VALUES (1, 'aaa', 100), (2, 'bbb', 200), (3, 'ccc', 300), (4, 'ddd', 400), (5, 'eee', 500);
-
test_table2
CREATE TABLE test_table2 (a Int32, b String, c Int32) ENGINE = MergeTree ORDER BY a;
INSERT INTO test_table2 VALUES (1, 'a', 0), (2, 'b', 0), (3, 'c', 0);
Интерактивный режим
После выполнения команды clickhouse-client
терминал переключается в интерактивный режим работы с сервером ADQM и отображает приглашение для ввода запроса — :)
. Выполнение запроса осуществляется нажатием Enter
(точка с запятой в конце запроса необязательна).
При выполнении команды clickhouse-client --multiline
активируется многострочный режим ввода запроса. В этом случае чтобы выполнить запрос, необходимо завершить его точкой с запятой и нажать Enter
. Если в конце введенной строки нет точки с запятой, при нажатии Enter
предлагается ввести следующую строку запроса.
Ниже приведен пример ввода и выполнения запроса в интерактивном режиме консольного клиента.
Запрос:
SELECT * FROM test_table1;
Вывод на экран:
SELECT * FROM test_table1 Query id: 917d68af-6989-409e-a30f-89a657487e22 --a---b-------c-- │ 1 │ aaa │ 100 │ │ 2 │ bbb │ 200 │ │ 3 │ ccc │ 300 │ │ 4 │ ddd │ 400 │ │ 5 │ eee │ 500 │ ----------------- 5 rows in set. Elapsed: 0.001 sec.
При выполнении запроса клиент выводит на экран:
-
Прогресс выполнение запроса (для быстрых запросов может не отобразиться).
-
Отформатированный запрос после его парсинга.
-
ID запроса.
-
Результат в заданном формате. По умолчанию clickhouse-client в интерактивном режиме использует формат
PrettyCompact
. -
Количество строк результата и время выполнения.
Чтобы выйти из интерактивного режима консольного клиента, можно нажать Ctrl+D
или ввести вместо запроса exit
, quit
, q
или logout
.
Пакетный режим
Клиент также можно использовать в пакетном (не интерактивном) режиме. Для этого можно:
-
Передать запрос в параметр
--query
командыclickhouse-client
:$ clickhouse-client --query "SELECT * FROM test_table2"
Пример вывода на экран:
1 a 0 2 b 0 3 c 0
-
Отправить запрос в stdin:
$ echo "SELECT * FROM test_table2" | clickhouse-client
Пример вывода на экран:
1 a 0 2 b 0 3 c 0
-
Одновременно использовать параметр
--query
и stdin. Например, для запросовINSERT
можно начало запроса написать в параметреquery
, а вставляемые данные передать в stdin:$ echo "(4,'d',4)" | clickhouse-client --query "INSERT INTO test_table2 VALUES" $ clickhouse-client --query "SELECT * FROM test_table2"
Пример вывода на экран:
1 a 0 2 b 0 3 c 0 4 d 4
По умолчанию в пакетном режиме можно выполнить только один запрос. Чтобы разрешить выполнение нескольких запросов, используется параметр –-multiquery
(работает для всех запросов кроме INSERT
). В этом случае в параметр --query
можно передать строку, включающую несколько запросов, разделённых точкой с запятой. Например:
$ clickhouse-client --multiquery --query "select * from test_table1;select * from test_table2;"
В пакетном режиме для вывода результатов запроса по умолчанию используется формат TabSeparated. При выполнении нескольких запросов с использованием опции –-multiquery
результаты запросов выводятся друг за другом без дополнительных разделителей. В следующем разделе приведены способы изменения формата вывода данных.
Формат вывода результатов запроса
Формат вывода результатов запроса можно задать следующими способами:
-
Указать нужный формат с помощью выражения
FORMAT
в запросе (указанный формат будет применяться для вывода результата данного запроса) или аргумента командной строки--format
(этот формат будет использоваться по умолчанию для всех запросов). -
Указать
\G
в конце запроса или использовать параметр командной строки--vertical
, чтобы использовать формат Vertical для отдельного запроса или всех запросов по умолчанию. -
Задать формат в конфигурационном файле клиента (/etc/clickhouse-client/config.xml).
Пример изменения формата вывода данных в пакетном режиме:
$ clickhouse-client --multiquery --query "select * from test_table1;select * from test_table2;" --format PrettyCompact
Вывод на экран:
--a---b-------c-- │ 1 │ aaa │ 100 │ │ 2 │ bbb │ 200 │ │ 3 │ ccc │ 300 │ │ 4 │ ddd │ 400 │ │ 5 │ eee │ 500 │ ----------------- --a---b---c-- │ 1 │ a │ 0 │ │ 2 │ b │ 0 │ │ 3 │ c │ 0 │ │ 4 │ d │ 4 │ -------------
Полную информацию об особенностях использования clickhouse-client можно получить в статье clickhouse-client документации ClickHouse.