Практика 'View и Distribute движки' - Clickhouse
This commit is contained in:
@@ -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. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает.
|
||||||
Reference in New Issue
Block a user