Files
tf_provider/docs/30_registry/resources/clickhouse_instruction.md
T
2026-06-30 15:45:24 +04:00

5.9 KiB

Инструкция для clickhouse

Инструкция по управлению кластерами и пользователями ClickHouse

---

## Общая информация

ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.

Кластер создаётся через оператор Altinity (https://github.com/Altinity/clickhouse-operator) в ресурсной платформе типа k8s

Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра Создать ClickHouse-Keeper.

Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу S3 Object Storage.
---

## Доступные операции

* create — Создание кластера
* delete — Удаление кластера
* suspend — Приостановка работы кластера
* resume — Возобновление работы кластера
* create_database — Создание базы данных
* delete_database — Удаление базы данных
* create_user — Создание пользователя и настройка прав доступа к базе данных
* delete_user — Удаление пользователя

## Процесс создания и первого подключения

1. Выполнить операцию create - будет создан кластер
2. Выполнить операцию create_database - будет создана база данных
3. Выполнить операцию create_user - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)

## Примеры подключения

### Подключение через HTTP-интерфейс

bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>

## Простые кейсы
Создать БД и обычной таблицы
clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>
Базы и таблицы не реплицируются без специального ключа (ON CLUSTER 'clickhousek8s')
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах


Создание БД и шардированной таблицы
clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse

Создание реплицируемой и шардированной таблицы
clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>