partitions solutions

This commit is contained in:
dr0zd
2026-01-29 20:36:44 +07:00
parent 0e385bd6d0
commit 341302725d
+98
View File
@@ -0,0 +1,98 @@
-- task 1
create table mdrozdov.sales2
on CLUSTER clickhouse_cluster (
id Int,
region String,
sale_date Date,
amount Decimal(8, 2)
)
engine = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mdrozdov/sales2',
'{replica}'
)
partition by toYYYYMM(sale_date)
order by id
-- удаление таблицы
-- drop table mdrozdov.sales
-- on CLUSTER clickhouse_cluster; не удаляет таблицу полностью, она остается в zookeeper
INSERT into mdrozdov.sales2 values
(1, 'RU', '2024-05-01', 100.0),
(2, 'RU', '2024-05-15', 120.0), --эти значения удалились
(3, 'US', '2024-06-01', 90.0),
(4, 'US', '2024-07-03', 150.0),
(5, 'DE', '2024-07-04', 160.0)
alter table mdrozdov.sales2
drop partition '202405'
--2 значения удалились, которые хранились в соответствующей партиции
-- task 2
create table mdrozdov.events2
on CLUSTER clickhouse_cluster (
id Int,
event_type String,
event_date Date
)
engine = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mdrozdov/events2',
'{replica}'
)
partition by event_type
order by id
INSERT into mdrozdov.events2 values
(1, 'login', '2024-06-01'),
(2, 'click', '2024-06-01'),
(3, 'click', '2024-06-02'),
(4, 'purchase', '2024-06-03'),
(5, 'login', '2024-06-04')
alter table mdrozdov.events2
drop partition 'click'
-- task 3
create table mdrozdov.logs
on CLUSTER clickhouse_cluster (
id Int,
user_id Int,
log_time DateTime
)
engine = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mdrozdov/logs',
'{replica}'
)
partition by cityHash64(user_id) % 100
order by id
insert into mdrozdov.logs values
(1, 123, '2024-07-17 10:00:00'),
(2, 456, '2024-07-17 10:01:00'),
(3, 789, '2024-07-17 10:02:00')
--Что ты выиграешь с точки зрения баланса?
--равномерное распределение данных в разных партициях, лучшее управление обновлением и удалением данных
-- Почему такой тип PARTITION не ускорит SELECT * WHERE user_id = 456?
-- потому что clickhouse не умеет выполнять условия партиции, чтобы найти сразу ту в которой надо искать,
-- поэтому будет пробегать все 100, чтобы найти нужное, поэтому важно, чтобы таблица была отсортирована по user_id
-- task 4
create table mdrozdov.visits
on CLUSTER clickhouse_cluster (
id Int,
region String,
visit_date Date
)
engine = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mdrozdov/visits',
'{replica}'
)
partition by (region, toYYYYMM(visit_date))
order by (region, visit_date)
insert into mdrozdov.visits values
(1, 'RU', '2024-06-01'),
(2, 'RU', '2024-06-15'),
(3, 'US', '2024-06-03'),
(4, 'US', '2024-07-01'),
(5, 'RU', '2024-07-05')
alter table mdrozdov.visits
drop partition ('RU', 202407) -- эффективное удаление июльских данных по россии