docs: create DevOps/Clickhouse/Cluster/0-Bases-and-query
parent
695d095133
commit
6864921ba2
|
|
@ -0,0 +1,164 @@
|
||||||
|
---
|
||||||
|
title: Основы и запросы
|
||||||
|
description:
|
||||||
|
published: true
|
||||||
|
date: 2025-05-15T20:01:45.285Z
|
||||||
|
tags: clickhouse
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 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
|
||||||
|
|
||||||
|
### Для одиночного сервера и кластера
|
||||||
|
#### Получение списка всех баз данных на сервере
|
||||||
|
```sql
|
||||||
|
SHOW DATABASES;
|
||||||
|
```
|
||||||
|
#### Просмотр всех таблиц в конкретной базе default
|
||||||
|
```sql
|
||||||
|
SHOW TABLES FROM default;
|
||||||
|
```
|
||||||
|
#### Получить запрос на создание таблицы из существующей
|
||||||
|
```sql
|
||||||
|
show create table default.event;
|
||||||
|
```
|
||||||
|
#### Создание базы данных
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE IF NOT EXISTS my_database ENGINE = Atomic;
|
||||||
|
```
|
||||||
|
Создает новую базу данных с именем `my_database`. Если такая база уже существует, ничего не произойдет благодаря условию `IF NOT EXISTS`.
|
||||||
|
Параметр `ENGINE = Atomic` используется для новых версий ClickHouse и позволяет создавать транзакционно безопасные базы данных. В ранних версиях использовался простой синтаксис без указания движка.
|
||||||
|
#### Создание таблицы
|
||||||
|
```sql
|
||||||
|
CREATE TABLE my_table (
|
||||||
|
event_date Date,
|
||||||
|
user_id UInt32,
|
||||||
|
page_views Int32,
|
||||||
|
revenue Float64
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree()
|
||||||
|
ORDER BY (event_date);
|
||||||
|
```
|
||||||
|
##### Вставка данных
|
||||||
|
```sql
|
||||||
|
INSERT INTO my_table VALUES ('2023-08-01', 1, 10, 100.5), ('2023-08-02', 2, 15, 150.75);
|
||||||
|
```
|
||||||
|
##### Выборка данных
|
||||||
|
```sql
|
||||||
|
SELECT * FROM my_table WHERE event_date >= '2023-08-01' AND event_date <= '2023-08-31';
|
||||||
|
```
|
||||||
|
#### Показ структуры таблицы
|
||||||
|
```sql
|
||||||
|
DESCRIBE TABLE my_database.my_table;
|
||||||
|
```
|
||||||
|
или подробнее:
|
||||||
|
```sql
|
||||||
|
SELECT * FROM system.columns WHERE table='my_table' AND database='my_database';
|
||||||
|
```
|
||||||
|
### Узнать сколько занимают места базы
|
||||||
|
```sql
|
||||||
|
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
|
||||||
|
```sql
|
||||||
|
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
|
||||||
|
```sql
|
||||||
|
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
|
||||||
|
```sql
|
||||||
|
TRUNCATE TABLE default.event_replicated;
|
||||||
|
```
|
||||||
|
#### Очистка старых данных от определенной даты
|
||||||
|
```sql
|
||||||
|
ALTER TABLE my_table DELETE WHERE event_date < '2023-08-01';
|
||||||
|
```
|
||||||
|
#### Безопасное удаление таблицы
|
||||||
|
```sql
|
||||||
|
DROP TABLE IF EXISTS my_database.my_table;
|
||||||
|
```
|
||||||
|
Безопасно удаляет указанную таблицу, если она существует.
|
||||||
|
|
||||||
|
|
||||||
|
### Для кластера
|
||||||
|
|
||||||
|
#### Вывести список серверов в кластере
|
||||||
|
```sql
|
||||||
|
SELECT hostName() FROM clusterAllReplicas('smvu2_cluster', 'system', 'one')
|
||||||
|
```
|
||||||
|
#### Получение списка Replicated таблиц
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
database,
|
||||||
|
name AS table,
|
||||||
|
engine
|
||||||
|
FROM system.tables
|
||||||
|
WHERE engine LIKE 'Replicated%';
|
||||||
|
```
|
||||||
|
#### Получение списка Distributed таблиц
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
database,
|
||||||
|
name AS table,
|
||||||
|
engine
|
||||||
|
FROM system.tables
|
||||||
|
WHERE engine LIKE 'Distributed%';
|
||||||
|
```
|
||||||
|
#### Проверить распределение данных базы event на серверах кластера
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
hostName() AS host,
|
||||||
|
count() AS count
|
||||||
|
FROM clusterAllReplicas(smvu2_cluster, default.event)
|
||||||
|
GROUP BY host;
|
||||||
|
```
|
||||||
|
#### Удалить таблицу в кластере
|
||||||
|
```sql
|
||||||
|
DROP TABLE event_replicated ON CLUSTER smvu2_cluster SYNC;
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue