5.9 KiB
5.9 KiB
| title | description | published | date | tags | editor | dateCreated |
|---|---|---|---|---|---|---|
| Основы и запросы | true | 2025-05-15T20:01:45.285Z | clickhouse | markdown | 2025-05-15T20:01:45.285Z |
Структура кластера
Найдено на просторах инета:
Выбор решения:
- Если диск загружен на запись (INSERT) → шардирование (Distributed).
- Если диск загружен на чтение (SELECT) → репликация (Replicated).
- Если один сервер, но много дисков → JBOD или RAID 0/10.
Реализуем такую структуру тестового кластера:
- сервер clickhouse-1
- сервер clickhouse-2
- сервер clickhouse-keeper Для того, чтобы это было надежно и работало быстро с записью в БД, необходимо сделать репликацию (Replicated) таблиц и распределенный (Distributed) доступ к таблицам. Если делать несколько шардов (shard) в настройках кластера, то это значит, что часть данных будет находится на одном сервере, другая часть на другом. При выходе из строя сервера мы потеряем всю базу. Поэтому настраиваем shard1 на обоих серверах, а также replica1 и replica2 для дублирования данных на серверах.
Репликация поддерживается только для таблиц семейства MergeTree:
https://clickhouse.com/docs/ru/engines/table-engines/mergetree-family/replication
- ReplicatedMergeTree
- ReplicatedSummingMergeTree
- ReplicatedReplacingMergeTree
- ReplicatedAggregatingMergeTree
- ReplicatedCollapsingMergeTree
- ReplicatedVersionedCollapsingMergeTree
- ReplicatedGraphiteMergeTree
Для одиночного сервера и кластера
Получение списка всех баз данных на сервере
SHOW DATABASES;
Просмотр всех таблиц в конкретной базе default
SHOW TABLES FROM default;
Получить запрос на создание таблицы из существующей
show create table default.event;
Создание базы данных
CREATE DATABASE IF NOT EXISTS my_database ENGINE = Atomic;
Создает новую базу данных с именем my_database. Если такая база уже существует, ничего не произойдет благодаря условию IF NOT EXISTS.
Параметр ENGINE = Atomic используется для новых версий ClickHouse и позволяет создавать транзакционно безопасные базы данных. В ранних версиях использовался простой синтаксис без указания движка.
Создание таблицы
CREATE TABLE my_table (
event_date Date,
user_id UInt32,
page_views Int32,
revenue Float64
)
ENGINE = MergeTree()
ORDER BY (event_date);
Вставка данных
INSERT INTO my_table VALUES ('2023-08-01', 1, 10, 100.5), ('2023-08-02', 2, 15, 150.75);
Выборка данных
SELECT * FROM my_table WHERE event_date >= '2023-08-01' AND event_date <= '2023-08-31';
Показ структуры таблицы
DESCRIBE TABLE my_database.my_table;
или подробнее:
SELECT * FROM system.columns WHERE table='my_table' AND database='my_database';
Узнать сколько занимают места базы
SELECT
database,
formatReadableSize(sum(bytes_on_disk)) AS total_size
FROM system.parts
WHERE active
GROUP BY database
ORDER BY sum(bytes_on_disk) DESC;
Узнать сколько занимают места таблицы в базе
default
SELECT
name AS table_name,
formatReadableSize(total_bytes) AS size_readable,
total_rows AS rows_count
FROM system.tables
WHERE database = 'default'
ORDER BY total_bytes DESC;
system
SELECT
name AS table_name,
formatReadableSize(total_bytes) AS size_readable,
total_rows AS rows_count
FROM system.tables
WHERE database = 'system'
ORDER BY total_bytes DESC;
Очистка базы event_replicated
TRUNCATE TABLE default.event_replicated;
Очистка старых данных от определенной даты
ALTER TABLE my_table DELETE WHERE event_date < '2023-08-01';
Безопасное удаление таблицы
DROP TABLE IF EXISTS my_database.my_table;
Безопасно удаляет указанную таблицу, если она существует.
Для кластера
Вывести список серверов в кластере
SELECT hostName() FROM clusterAllReplicas('smvu2_cluster', 'system', 'one')
Получение списка Replicated таблиц
SELECT
database,
name AS table,
engine
FROM system.tables
WHERE engine LIKE 'Replicated%';
Получение списка Distributed таблиц
SELECT
database,
name AS table,
engine
FROM system.tables
WHERE engine LIKE 'Distributed%';
Проверить распределение данных базы event на серверах кластера
SELECT
hostName() AS host,
count() AS count
FROM clusterAllReplicas(smvu2_cluster, default.event)
GROUP BY host;
Удалить таблицу в кластере
DROP TABLE event_replicated ON CLUSTER smvu2_cluster SYNC;