-- Задание 1 CREATE TABLE mnoskov.sales ON CLUSTER clickhouse_cluster ( id UInt64, region String, sale_date Date, amount Float64 ) ENGINE=ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/sales', '{replica}' ) PARTITION BY toYYYYMM(sale_date) ORDER BY sale_date; ALTER TABLE mnoskov.sales DROP PARTITION '202405'; SELECT * FROM mnoskov.sales; -- Пропали строки где год/месяц 202405. -- Если не указывать PARTITION BY, то строки бы искались по всей таблице, что дольше и затранее. -- Задание 2 CREATE TABLE mnoskov.events ON CLUSTER clickhouse_cluster ( id UInt64, event_type String, event_date Date ) ENGINE=ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/events_partitioned', '{replica}' ) PARTITION BY event_type ORDER BY event_date; ALTER TABLE mnoskov.events DROP PARTITION 'click'; ELECT * FROM mnoskov.events; -- Такой подход опасен, тк например login выполняется не часто по сравнению с click и получается жесткий перевес. -- Задание 3 CREATE TABLE mnoskov.logs ON CLUSTER clickhouse_cluster ( id UInt64, user_id UInt64, log_time DateTime ) ENGINE=ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/logs_partitioned', '{replica}' ) PARTITION BY cityHash64(user_id) % 100 ORDER BY log_time; SELECT * FROM mnoskov.logs -- 2 с точки зрения баланса, у нас юзеры распределные равномерно и нет никаких перекосов. -- 3 хз если честно, мне кажется должны ускорять. -- Задание 4 CREATE TABLE mnoskov.visits ON CLUSTER clickhouse_cluster ( id UInt64, region String, visit_date Date ) ENGINE=ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/visits', '{replica}' ) PARTITION BY (region, toYYYYMM(visit_date)) ORDER BY visit_date; SELECT * FROM mnoskov.visits; -- 2 доступа к системным таблицам нет, потэтому я не могу посмотреть имя партиции. -- 3 ну да ALTER TABLE mnoskov.visits DROP PARTITION ('RU', '202407');