# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Overview](clickhouse.md) | [Parameters](clickhouse_params.md) | [Operations](clickhouse_ops.md)
## MAN
# Инструкция по управлению кластерами и пользователями 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
# Проверка доступности кластера
curl "http://<username>:<password>@<host>:8123/" -d "SELECT 1"
# Выполнение запроса
curl "http://<username>:<password>@<host>:8123/" -d "SHOW DATABASES"
```
## Простые кейсы
*Создать БД и обычной таблицы*
```clickhouse
CREATE TABLE database.table
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM database.table;
```
Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах
*Создание БД и шардированной таблицы*
```clickhouse
CREATE TABLE database.localUsers
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
CREATE TABLE database.shardedTable
AS localUsers
ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);
INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM shardedTable;
```
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse
*Создание реплицируемой и шардированной таблицы*
```clickhouse
CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'
(
user_id UInt64,
name String,
email String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/localUsers',
'{replica}'
)
ORDER BY user_id;
CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'
AS database.localUsers
ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());
INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');
INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');
INSERT INTO database.users VALUES (4, 'David', 'david@example.com');
INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');
INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');
INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');
INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');
INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');
INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');
SELECT * FROM database.localUsers;
SELECT * FROM database.users;
SELECT COUNT(*) AS total_users FROM database.users;
SELECT COUNT(*) AS total_users_local FROM database.localUsers;
```
## Summary
# Инструкция по управлению кластерами и пользователями ClickHouse
## Example
```hcl
resource "nubes_clickhouse" "example" {
resource_realm = "TODO"
s3_uid = "235e0546-..."
resource_instances = 1
resource_instances_shards = 1
resource_c_p_u = 1000
resource_memory = 1536
app_version = 25.10
resource_disk = 10
need_external_address_master = false
need_create_keeper = true
resource_c_p_u_keeper = 50
resource_memory_keeper = 152
resource_instances_keeper = 1
ext__b_a_c_k_u_p__s_c_h_e_d_u_l_e = 0 0 * * *
ext__b_a_c_k_u_p__n_u_m__t_o__r_e_t_a_i_n = 7
adopt_existing_on_create = НЕТ
suspend_on_destroy = ДА
}
```
## Outputs
- `state_params` (map)
- `state_out` (map)
- `state_params_flat` (map)
- `state_out_flat` (map)
- `vault_secrets` (map)
- `vault_url` (string)
- `vault_user_path` (string)
- `vault_fields` (list)
## Lifecycle defaults
- `suspend_on_destroy_default` = `True`
- `adopt_existing_on_create_default` = `False`
## Lifecycle behavior
- For suspend-capable services: cloud status `missing/deleted` => create, `suspend` + key params match => resume.
- `running` requires explicit `adopt_existing_on_create=true` for adopt/import behavior, otherwise error.
- Destroy uses `suspend_on_destroy`: true => suspend, false => remove from state only.