Files
homework/mnoskov/clickhouse/Практика clickhouse/3. Индексы и сжатие/1. Партиции/practice_partitions.sql
T
mnoskov ae208a76fb Работа над ошибками: 'Синтаксис'.
Практика: 'JOIN' - 'Массивы, Map и вложенные структуры*' - 'Партиции' - 'Индексы'.
2026-05-18 16:55:22 +03:00

86 lines
2.2 KiB
SQL

-- Задание 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');