Базы данных: ClickHouse
ClickHouseopen in new window (GitHubopen in new window) — колоночная база данных. ClickHouse используется для больших хранилищ данных для ускорения аналитических запросов. ClickHouse направлен на OLAP.
Для запросов ClickHouse использует свой язык похожий на SQL.
Запуск
Запустить ClickHouse проще всего через dockeropen in new window.
docker run -d --name clickhouse-server \
-p 8123:8123 \
-p 9000:9000 \
--ulimit nofile=262144:262144 \
yandex/clickhouse-server
1
2
3
4
5
2
3
4
5
clickhouse-client
ClickHouser предоставляет консольную программу для управления базой данных clickhouse-clientopen in new window.
Для запуска в контейнере docker Наберите команду
docker exec -it clickhouse-server clickhouse-client
1
Пример работы. Создаём базу данных:
b0e4b554a392 :) CREATE DATABASE IF NOT EXISTS newdb;
CREATE DATABASE IF NOT EXISTS newdb
Query id: 5b5867ab-ab57-4bd5-a902-78e7a1b75fd9
Ok.
0 rows in set. Elapsed: 0.023 sec.
b0e4b554a392 :) USE newdb;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Подключается к базе данных:
USE newdb
Query id: 62ba7f5f-9479-4734-bad8-27b2563028fe
Ok.
0 rows in set. Elapsed: 0.003 sec.
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Создаём таблицу в базе данных:
b0e4b554a392 :) CREATE TABLE user (
id UInt32,
name String,
created_at DateTime
) ENGINE = MergeTree()
ORDER BY id;
CREATE TABLE user
(
`id` UInt32,
`name` String,
`created_at` DateTime
)
ENGINE = MergeTree
ORDER BY id
Query id: cd391f57-f554-4033-b733-aab58a3d2513
Ok.
0 rows in set. Elapsed: 0.029 sec.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Выводим все таблицы в базе данных:
b0e4b554a392 :) SHOW TABLES;
SHOW TABLES
Query id: b9678529-dcd8-478f-92eb-406487b29094
┌─name─┐
│ user │
└──────┘
1 rows in set. Elapsed: 0.009 sec.
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Пример на Python
Пример использования библиотеки clickhouse-driveropen in new window (документацияopen in new window):
from clickhouse_driver import Client
# Создаем подключение к ClickHouse
client = Client('localhost', port=9000) # Замените 'localhost' на адрес вашего сервера ClickHouse
# Создаем таблицу (если она еще не существует)
client.execute('''
CREATE TABLE IF NOT EXISTS test_table (
id UInt32,
name String,
age UInt8
) ENGINE = MergeTree()
ORDER BY id
''')
# Добавляем данные в таблицу
data = [
(1, 'Alice', 30),
(2, 'Bob', 25),
(3, 'Charlie', 35)
]
client.execute('INSERT INTO test_table (id, name, age) VALUES', data)
# Выбираем данные из таблицы
result = client.execute('SELECT * FROM test_table')
# Выводим результаты
for row in result:
print(row)
# Закрываем соединение (необязательно, так как клиент автоматически закрывает соединение при завершении работы)
client.disconnect()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Ввод программы:
(1, 'Alice', 30)
(2, 'Bob', 25)
(3, 'Charlie', 35)
1
2
3
2
3
Ссылки
- Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)open in new window
- 005. Как работает ClickHouse, лекция в ШАДopen in new window — детально про алгоритмы и способ хранения данных