diff --git a/mnoskov/clickhouse/практика clickhouse/1. Движки/practice_view_and_distribute_engines.sql b/mnoskov/clickhouse/практика clickhouse/1. Движки/practice_view_and_distribute_engines.sql index 67eacc4..2a7de23 100644 --- a/mnoskov/clickhouse/практика clickhouse/1. Движки/practice_view_and_distribute_engines.sql +++ b/mnoskov/clickhouse/практика clickhouse/1. Движки/practice_view_and_distribute_engines.sql @@ -18,9 +18,9 @@ ENGINE = Distributed( 'clickhouse_cluster', 'mnoskov', 'logs', - rand() + user_id ); --- параметр rand() - это ключ распределния как я понял. Если стоит он, то распределяются данные случайно, если укащать колонку, то по колонке. +-- параметр rand() - это ключ распределния между шардами. Если стоит он, то распределяются данные случайно, если укащать колонку, то по колонке. -- Задание 2 @@ -54,16 +54,15 @@ LIMIT 100; -- Задание 3 --- тут вообще жопа какая-то. Если смотреть на пример создания MV, то выдает ошибку мол engine указывать нельзя. Полез в документацию, там сказано что после указания имени mv нужно добавлять TO ... но все равно выдется ошибка. --- этот способ я в хабре нашел CREATE TABLE mnoskov.raw_events +ON CLUSTER clickhouse_cluster ( - event_time DateTime, - user_id UInt32, - event_type String + event_time DateTime, + user_id UInt32, + event_type String ) -ENGINE = MergeTree -ORDER BY (event_time, user_id); +ENGINE=MergeTree +ORDER BY(event_time,user_id); CREATE TABLE mnoskov.agr_clicks_per_day ON CLUSTER clickhouse_cluster @@ -71,17 +70,17 @@ ON CLUSTER clickhouse_cluster event_date Date, count UInt64 ) -ENGINE = MergeTree +ENGINE=SummingMergeTree ORDER BY event_date; -CREATE MATERIALIZED VIEW mnoskov.mv_clicks_per_day TO mnosokv.agr_clicks_per_day AS +CREATE MATERIALIZED VIEW mnoskov.mv_clicks_per_day +ON CLUSTER clickhouse_cluster +TO mnoskov.agr_clicks_per_day AS SELECT toDate(event_time) AS event_date, count(*) AS count -FROM - mnoskov.raw_events -GROUP BY - event_date; +FROM mnoskov.raw_events +GROUP BY event_date; -SELECT * FROM mnoskov.agr_clicks_per_day; --- ничего у меня получилось, и с SummingMergeTree ни с MergeTree. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает. \ No newline at end of file +SELECT * FROM mnoskov.raw_events; +SELECT * FROM mnoskov.agr_clicks_per_day; \ No newline at end of file diff --git a/mnoskov/clickhouse/практика clickhouse/2. Типы данных/practice_data_types.sql b/mnoskov/clickhouse/практика clickhouse/2. Типы данных/practice_data_types.sql index a92fb71..b8d8218 100644 --- a/mnoskov/clickhouse/практика clickhouse/2. Типы данных/practice_data_types.sql +++ b/mnoskov/clickhouse/практика clickhouse/2. Типы данных/practice_data_types.sql @@ -13,18 +13,24 @@ ENGINE = ReplicatedMergeTree( ORDER BY tuple(); SELECT + user_id, + balance, + created_at +FROM ( + SELECT user_id, toDecimal64OrNull(balance,2) AS balance, toDateTime64OrNull(created_at, 3) AS created_at FROM mnoskov.raw_data1 +) WHERE balance IS NOT NULL AND created_at IS NOT NULL; -- Задание 2 -CREATE TABLE events +CREATE TABLE mnoskov.events ON CLUSTER clickhouse_cluster ( event_id String, event_date String, -- форматы: "2023-01-01", "01.02.2023", "invalid" @@ -42,18 +48,16 @@ SELECT * FROM mnoskov.events; SELECT event_id, - toDate(parseDateTimeBestEffortOrNull(event_date)) AS event_dates, - CASE - WHEN toDayOfMonth(parseDateTimeBestEffortOrNull(event_time)) = 1 THEN toHour(parseDateTimeBestEffortOrNull(event_time)) - ELSE (toDayOfMonth(parseDateTimeBestEffortOrNull(event_time)) - 1) * 24 + toHour(parseDateTimeBestEffortOrNull(event_time)) - END AS event_times, - toDateTime(parseDateTimeBestEffortOrNull(event_date)) + toIntervalHour(event_times) AS event_datetime -FROM - mnoskov.events + event_datetime +FROM ( + SELECT + event_id, + parseDateTimeBestEffortOrNull(concat(event_date, ' ', event_time)) AS event_datetime + FROM + mnoskov.events +) ORDER BY - event_dates; --- Все преобразования с to... и parse... нашел тут https://clickhouse.com/docs/ru/sql-reference/functions/type-conversion-functions#toIntervalMonth. --- explain analyze не работает, потэому не могу посмотреть насколько это эффективно, НО главное сам запрос работает. + event_datetime; -- Задание 3 @@ -73,7 +77,7 @@ ORDER BY SELECT user_id, - count(*) + count(*) as user_actions_cnt FROM mnoskov.user_activity WHERE