homework, pet project DE Dmitry_Medvedev #1

Open
dmitry_medvedev wants to merge 264 commits from md_branch into main
Showing only changes of commit 318c50b563 - Show all commits
@@ -0,0 +1,87 @@
-- Задание 1
CREATE TABLE mnoskov.logs
ON CLUSTER clickhouse_cluster (
dt DateTime,
user_id UInt32,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/logs',
'{replica}'
)
ORDER BY dt;
CREATE TABLE mnoskov.dist_logs
ON CLUSTER clickhouse_cluster
ENGINE = Distributed(
'clickhouse_cluster',
'mnoskov',
'logs',
rand()
);
-- параметр rand() - это ключ распределния как я понял. Если стоит он, то распределяются данные случайно, если укащать колонку, то по колонке.
-- Задание 2
CREATE TABLE mnoskov.events
ON CLUSTER clickhouse_cluster
(
user_id UInt32,
event_type String,
ts DateTime
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/events',
'{replica}'
)
ORDER BY (ts, user_id);
CREATE VIEW top_active_users AS
SELECT
user_id,
count(*) AS cnt_user
FROM
mnoskov.events
GROUP BY
user_id
ORDER BY
cnt_user DESC, user_id
LIMIT 100;
-- VIEW не подойдет, тк вьюшка будет каждый раз считаться заново, а это энергозатратно, поэтому надо использовать MATERIALIZED VIEW.
-- Задание 3
-- тут вообще жопа какая-то. Если смотреть на пример создания MV, то выдает ошибку мол engine указывать нельзя. Полез в документацию, там сказано что после указания имени mv нужно добавлять TO ... но все равно выдется ошибка.
-- этот способ я в хабре нашел
CREATE TABLE raw_events
(
event_time DateTime,
user_id UInt32,
event_type String
)
ENGINE = MergeTree
ORDER BY (event_time, user_id);
CREATE TABLE agr_clicks_per_day
ON CLUSTER clickhouse_cluster
(
event_date Date,
count UInt64
)
ENGINE = MergeTree
ORDER BY event_date;
CREATE MATERIALIZED VIEW mv_clicks_per_day TO agr_clicks_per_day AS
SELECT
toDate(event_time) AS event_date,
count(*) AS count
FROM
mnoskov.raw_events
GROUP BY
event_date;
SELECT * FROM agr_clicks_per_day;
-- ничего у меня получилось, и с SummingMergeTree ни с MergeTree. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает.