partitions solutions
This commit is contained in:
@@ -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) -- эффективное удаление июльских данных по россии
|
||||
Reference in New Issue
Block a user