diff --git a/mnoskov/clickhouse/практика clickhouse/practice_view_and_distribute_engines.sql b/mnoskov/clickhouse/практика clickhouse/practice_view_and_distribute_engines.sql new file mode 100644 index 0000000..0c3d9ee --- /dev/null +++ b/mnoskov/clickhouse/практика clickhouse/practice_view_and_distribute_engines.sql @@ -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. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает. \ No newline at end of file