From e7f7bb8dc6d13d0ce4cb624d0ec0268b9ef6745f Mon Sep 17 00:00:00 2001 From: Batirbulat Date: Wed, 24 Dec 2025 21:07:56 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B8=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D1=8B,=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D1=8B=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bhabibullin/clickhouse/clickhouse_pet.sql | 52 +++++++++++++++++------ 1 file changed, 38 insertions(+), 14 deletions(-) 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