34 lines
1.4 KiB
SQL
34 lines
1.4 KiB
SQL
-- task 1
|
|
CREATE TABLE dist_table
|
|
ENGINE = Distributed(
|
|
'cluster_name', -- нет доступа к конфигу infra clickhouse
|
|
'mdrozdov',
|
|
'logs',
|
|
rand()
|
|
);
|
|
--rand() это параметр по которому мы распределяем данные при insert на разные ноды, в данном
|
|
--случае нам это нужно для равномерности распределения, потому что таблица не требует особых связей или тп
|
|
|
|
-- task 2
|
|
--Создай VIEW top_active_users, который показывает топ-100 пользователей по числу событий
|
|
CREATE VIEW top_active_users AS
|
|
select user_id, count(*) as total_events
|
|
from events
|
|
group by user_id
|
|
order by total_events desc
|
|
limit 100
|
|
-- не подходит для дашборда с миллионами строк, потому что вычисляется каждый раз при вызове
|
|
-- для дашбордов лучше подойдет materialized view, тк хранит данные запроса и обновляется автоматически
|
|
-- при вставке новых данных
|
|
|
|
--task 3
|
|
CREATE MATERIALIZED VIEW
|
|
to
|
|
ENGINE = SummingMergeTree
|
|
order by date
|
|
mv_clicks_per_day AS
|
|
select
|
|
toDate(event_time) as date,
|
|
count(*) as total_clicks
|
|
from raw_events
|
|
group by date |