Практика 'Типы таблиц' - Clickhouse
This commit is contained in:
@@ -0,0 +1,120 @@
|
|||||||
|
-- Задание 1
|
||||||
|
|
||||||
|
CREATE TABLE mnoskov.page_views
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
user_id UInt64,
|
||||||
|
url String,
|
||||||
|
view_time DateTime
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree
|
||||||
|
PARTITION BY toYYYYMM(view_time)
|
||||||
|
ORDER BY (user_id, view_time);
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 2
|
||||||
|
CREATE TABLE mnoskov.users
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
id UInt64,
|
||||||
|
name String,
|
||||||
|
update_at DateTime
|
||||||
|
)
|
||||||
|
ENGINE = ReplacingMergeTree(update_at)
|
||||||
|
ORDER BY id;
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 3
|
||||||
|
CREATE TABLE mnoskov.region_sales
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
region String,
|
||||||
|
date Date,
|
||||||
|
sales UInt64
|
||||||
|
)
|
||||||
|
ENGINE = SummingMergeTree
|
||||||
|
PARTITION BY toYYYYMM(date)
|
||||||
|
ORDER BY (region, date)
|
||||||
|
|
||||||
|
INSERT INTO mnoskov.region_sales (region, date, sales)
|
||||||
|
VALUES
|
||||||
|
('Moscow', '2026-05-01', 100),
|
||||||
|
('Moscow', '2026-05-01', 150),
|
||||||
|
('Moscow', '2026-05-01', 200),
|
||||||
|
('Berlin', '2026-05-02', 300),
|
||||||
|
('Berlin', '2026-05-02', 120),
|
||||||
|
('Berlin', '2026-05-02', 80),
|
||||||
|
('Paris', '2026-05-03', 500),
|
||||||
|
('Paris', '2026-05-03', 250),
|
||||||
|
('London', '2026-05-04', 400),
|
||||||
|
('Tokyo', '2026-05-05', 700);
|
||||||
|
|
||||||
|
SELECT * FROM mnoskov.region_sales;
|
||||||
|
-- Все четко работает.
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 4
|
||||||
|
CREATE TABLE mnoskov.user_metrics
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
region String,
|
||||||
|
avg_age_state AggregateFunction(avg, UInt8),
|
||||||
|
active_users_state AggregateFunction(uniq, UInt64)
|
||||||
|
)
|
||||||
|
ENGINE = AggregatingMergeTree
|
||||||
|
ORDER BY region;
|
||||||
|
|
||||||
|
CREATE TABLE mnoskov.user_metrics_source
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
region String,
|
||||||
|
age UInt8,
|
||||||
|
user_id UInt64
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree
|
||||||
|
ORDER BY region;
|
||||||
|
|
||||||
|
INSERT INTO mnoskov.user_metrics_source
|
||||||
|
(region, age, user_id)
|
||||||
|
VALUES
|
||||||
|
('Moscow', 25, 1001),
|
||||||
|
('Moscow', 30, 1002),
|
||||||
|
('Moscow', 22, 1003),
|
||||||
|
('Moscow', 25, 1001),
|
||||||
|
('Berlin', 40, 2001),
|
||||||
|
('Berlin', 35, 2002),
|
||||||
|
('Berlin', 29, 2003),
|
||||||
|
('Berlin', 35, 2002),
|
||||||
|
('Paris', 31, 3001),
|
||||||
|
('Paris', 28, 3002),
|
||||||
|
('Paris', 45, 3003),
|
||||||
|
('Paris', 31, 3001),
|
||||||
|
('London', 50, 4001),
|
||||||
|
('London', 41, 4002),
|
||||||
|
('London', 38, 4003),
|
||||||
|
('London', 41, 4002),
|
||||||
|
('Tokyo', 27, 5001),
|
||||||
|
('Tokyo', 33, 5002),
|
||||||
|
('Tokyo', 29, 5003),
|
||||||
|
('Tokyo', 33, 5002);
|
||||||
|
SELECT * FROM mnoskov.user_metrics_source;
|
||||||
|
|
||||||
|
INSERT INTO mnoskov.user_metrics
|
||||||
|
SELECT
|
||||||
|
region,
|
||||||
|
avgState(age) AS avg_age_state,
|
||||||
|
uniqState(user_id) AS active_users_state
|
||||||
|
FROM
|
||||||
|
mnoskov.user_metrics_source
|
||||||
|
GROUP BY
|
||||||
|
region;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
region,
|
||||||
|
avgMerge(avg_age_state),
|
||||||
|
uniqMerge(active_users_state)
|
||||||
|
FROM
|
||||||
|
mnoskov.user_metrics
|
||||||
|
GROUP BY
|
||||||
|
region;
|
||||||
|
-- Че то кликхаус странно себя ведет, то таблицы сами очищаются, то удаленные таблицы воскресают.
|
||||||
@@ -53,7 +53,7 @@ LEFT JOIN (
|
|||||||
) e ON du.user_id = e.user_id
|
) e ON du.user_id = e.user_id
|
||||||
WHERE
|
WHERE
|
||||||
NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id);
|
NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id);
|
||||||
-- интересно, что при проверки плана запроса, когда кусок с enrollments_count был в CTE, выдавал какую-то хуйню, а когда я засунул его в подзапрос, сразу инлексы заработали, и строки начали эффективней читаться
|
-- интересно, что во время проверки плана запроса, когда кусок с enrollments_count был в CTE, план запроса выдавал какую-то хуйню, а когда я засунул его в подзапрос, сразу индексы заработали, и строки начали эффективней читаться
|
||||||
|
|
||||||
|
|
||||||
-- 9
|
-- 9
|
||||||
|
|||||||
Reference in New Issue
Block a user