From 341302725da2074f12fc0ab49e2e9952f5da093d Mon Sep 17 00:00:00 2001 From: dr0zd Date: Thu, 29 Jan 2026 20:36:44 +0700 Subject: [PATCH] partitions solutions --- mdrozdov/clickhouse/partitions.sql | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 mdrozdov/clickhouse/partitions.sql diff --git a/mdrozdov/clickhouse/partitions.sql b/mdrozdov/clickhouse/partitions.sql new file mode 100644 index 0000000..817d95b --- /dev/null +++ b/mdrozdov/clickhouse/partitions.sql @@ -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) -- эффективное удаление июльских данных по россии \ No newline at end of file