diff --git a/bhabibullin/clickhouse/clickhouse_pet.sql b/bhabibullin/clickhouse/clickhouse_pet.sql index ab38da1..94ad016 100644 --- a/bhabibullin/clickhouse/clickhouse_pet.sql +++ b/bhabibullin/clickhouse/clickhouse_pet.sql @@ -87,6 +87,7 @@ ORDER BY (lesson_id, course_id); */ CREATE TABLE bhabibullin.lesson_popularity_summary +ON CLUSTER clickhouse_cluster ( lesson_id UInt32, lesson_title String, @@ -97,10 +98,14 @@ CREATE TABLE bhabibullin.lesson_popularity_summary first_view DateTime64(3, 'UTC'), last_view DateTime64(3, 'UTC') ) -ENGINE = MergeTree +ENGINE = ReplicatedMergeTree( + '/clickhouse/tables/{shard}/bhabibullin/lesson_popularity_summary', + '{replica}' +) ORDER BY (lesson_id, course_id); CREATE MATERIALIZED VIEW mv_lesson_popularity_summary +ON CLUSTER clickhouse_cluster TO bhabibullin.lesson_popularity_summary AS SELECT @@ -140,8 +145,9 @@ GROUP BY flv.course_id, c.title; -select * from bhabibullin.mv_lesson_popularity_summary mlps ; -select * from bhabibullin.lesson_popularity_summary lps ; +select * from bhabibullin.mv_lesson_popularity_summary ; +select * from bhabibullin.lesson_popularity_summary ; +show tables; /* ### ✅ **Задание 3: Создай витрину `inactive_users_summary`** @@ -161,7 +167,13 @@ select * from bhabibullin.lesson_popularity_summary lps ; Эта витрина может использоваться для продуктовой аналитики, триггерных рассылок (например, напоминаний), анализа оттока, повышения вовлечённости. */ -CREATE TABLE bhabibullin.inactive_users_summary( +DROP TABLE bhabibullin.inactive_users_summary; +DROP VIEW bhabibullin.mv_inactive_users_summary ; +show tables; + +CREATE TABLE bhabibullin.inactive_users_summary +ON CLUSTER clickhouse_cluster +( user_id UInt32, name String, email String, @@ -169,10 +181,14 @@ CREATE TABLE bhabibullin.inactive_users_summary( enrollment_count UInt32, registration_date Date ) -ENGINE = MergeTree() +ENGINE = ReplicatedMergeTree( + '/clickhouse/tables/{shard}/bhabibullin/inactive_users_summary', + '{replica}' +) ORDER BY user_id; CREATE MATERIALIZED VIEW bhabibullin.mv_inactive_users_summary +ON CLUSTER clickhouse_cluster to bhabibullin.inactive_users_summary AS SELECT @@ -204,6 +220,9 @@ WHERE (cdu.user_id, 1) NOT IN ( GROUP BY user_id ); +select * from bhabibullin.inactive_users_summary ius ; +select * from bhabibullin.mv_inactive_users_summary mius ; + /* ### ✅ **Задание 4: Создай витрину `course_completion_rate`** @@ -218,8 +237,8 @@ WHERE (cdu.user_id, 1) NOT IN ( - Коэффициент завершения (`lessons_viewed / lessons_in_course`) */ - CREATE TABLE IF NOT EXISTS bhabibullin.course_completion_rate +ON CLUSTER clickhouse_cluster ( user_id UInt32, user_name String, @@ -229,11 +248,15 @@ CREATE TABLE IF NOT EXISTS bhabibullin.course_completion_rate lessons_viewed UInt32, completion_rate Float64 ) -ENGINE = MergeTree() +ENGINE = ReplicatedMergeTree( + '/clickhouse/tables/{shard}/bhabibullin/course_completion_rate', + '{replica}' +) ORDER BY (user_id, course_id); CREATE MATERIALIZED VIEW IF NOT EXISTS bhabibullin.mv_course_completion_rate +ON CLUSTER clickhouse_cluster TO bhabibullin.course_completion_rate AS WITH lessons_in_course AS ( @@ -312,6 +335,9 @@ JOIN core_dim_course c ON e.course_id = c.course_id JOIN lessons_in_course AS lic ON c.course_id = lic.course_id LEFT JOIN views_user_course AS vuc ON vuc.user_id = u.user_id AND vuc.course_id = c.course_id; +select * from bhabibullin.course_completion_rate; +select * from bhabibullin.mv_course_completion_rate; + /* # 📊 Этап 3. Анализ и запросы @@ -333,9 +359,9 @@ LIMIT 5; SELECT name, email, - registered_courses_count + enrollment_count FROM inactive_users_summary -WHERE registered_courses_count > 0 +WHERE enrollment_count > 0 ORDER BY registration_date DESC; --Курсы с самым высоким процентом завершения @@ -350,10 +376,9 @@ LIMIT 5; -- топ 5 курсов по количеству уникальных пользователей SELECT course_title, - uniqExact(user_id) AS active_users + unique_users FROM lesson_popularity_summary -GROUP BY course_title -ORDER BY active_users DESC +ORDER BY unique_users DESC LIMIT 5; --новые пользователи за прошлый месяц @@ -368,7 +393,7 @@ ORDER BY registration_date DESC; /* ### ✅ **Задание 6: Сравни данные с Greenplum** - + 1. Выбери 2–3 значения из таблиц `_summary_source` в Greenplum 2. Сравни с ClickHouse-результатами: - Совпадает ли `SUM`, `AVG`, `MIN`, `MAX` @@ -382,4 +407,3 @@ ORDER BY registration_date DESC; С этим даже траблы были при пет проекте, кликхаус тяжело обрабатывает нулл значения */ - \ No newline at end of file