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