98 lines
3.0 KiB
SQL
98 lines
3.0 KiB
SQL
-- 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) -- эффективное удаление июльских данных по россии |