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