Комментарии написаны, таблицы приведены в порядок

This commit is contained in:
Batirbulat
2025-12-24 21:07:56 +03:00
parent ad47dd718e
commit e7f7bb8dc6
+38 -14
View File
@@ -87,6 +87,7 @@ ORDER BY (lesson_id, course_id);
*/ */
CREATE TABLE bhabibullin.lesson_popularity_summary CREATE TABLE bhabibullin.lesson_popularity_summary
ON CLUSTER clickhouse_cluster
( (
lesson_id UInt32, lesson_id UInt32,
lesson_title String, lesson_title String,
@@ -97,10 +98,14 @@ CREATE TABLE bhabibullin.lesson_popularity_summary
first_view DateTime64(3, 'UTC'), first_view DateTime64(3, 'UTC'),
last_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); ORDER BY (lesson_id, course_id);
CREATE MATERIALIZED VIEW mv_lesson_popularity_summary CREATE MATERIALIZED VIEW mv_lesson_popularity_summary
ON CLUSTER clickhouse_cluster
TO bhabibullin.lesson_popularity_summary TO bhabibullin.lesson_popularity_summary
AS AS
SELECT SELECT
@@ -140,8 +145,9 @@ GROUP BY
flv.course_id, flv.course_id,
c.title; c.title;
select * from bhabibullin.mv_lesson_popularity_summary mlps ; select * from bhabibullin.mv_lesson_popularity_summary ;
select * from bhabibullin.lesson_popularity_summary lps ; select * from bhabibullin.lesson_popularity_summary ;
show tables;
/* /*
### ✅ **Задание 3: Создай витрину `inactive_users_summary`** ### ✅ **Задание 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, user_id UInt32,
name String, name String,
email String, email String,
@@ -169,10 +181,14 @@ CREATE TABLE bhabibullin.inactive_users_summary(
enrollment_count UInt32, enrollment_count UInt32,
registration_date Date registration_date Date
) )
ENGINE = MergeTree() ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/bhabibullin/inactive_users_summary',
'{replica}'
)
ORDER BY user_id; ORDER BY user_id;
CREATE MATERIALIZED VIEW bhabibullin.mv_inactive_users_summary CREATE MATERIALIZED VIEW bhabibullin.mv_inactive_users_summary
ON CLUSTER clickhouse_cluster
to bhabibullin.inactive_users_summary to bhabibullin.inactive_users_summary
AS AS
SELECT SELECT
@@ -204,6 +220,9 @@ WHERE (cdu.user_id, 1) NOT IN (
GROUP BY user_id GROUP BY user_id
); );
select * from bhabibullin.inactive_users_summary ius ;
select * from bhabibullin.mv_inactive_users_summary mius ;
/* /*
### ✅ **Задание 4: Создай витрину `course_completion_rate`** ### ✅ **Задание 4: Создай витрину `course_completion_rate`**
@@ -218,8 +237,8 @@ WHERE (cdu.user_id, 1) NOT IN (
- Коэффициент завершения (`lessons_viewed / lessons_in_course`) - Коэффициент завершения (`lessons_viewed / lessons_in_course`)
*/ */
CREATE TABLE IF NOT EXISTS bhabibullin.course_completion_rate CREATE TABLE IF NOT EXISTS bhabibullin.course_completion_rate
ON CLUSTER clickhouse_cluster
( (
user_id UInt32, user_id UInt32,
user_name String, user_name String,
@@ -229,11 +248,15 @@ CREATE TABLE IF NOT EXISTS bhabibullin.course_completion_rate
lessons_viewed UInt32, lessons_viewed UInt32,
completion_rate Float64 completion_rate Float64
) )
ENGINE = MergeTree() ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/bhabibullin/course_completion_rate',
'{replica}'
)
ORDER BY (user_id, course_id); ORDER BY (user_id, course_id);
CREATE MATERIALIZED VIEW IF NOT EXISTS bhabibullin.mv_course_completion_rate CREATE MATERIALIZED VIEW IF NOT EXISTS bhabibullin.mv_course_completion_rate
ON CLUSTER clickhouse_cluster
TO bhabibullin.course_completion_rate TO bhabibullin.course_completion_rate
AS AS
WITH lessons_in_course 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 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; 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. Анализ и запросы # 📊 Этап 3. Анализ и запросы
@@ -333,9 +359,9 @@ LIMIT 5;
SELECT SELECT
name, name,
email, email,
registered_courses_count enrollment_count
FROM inactive_users_summary FROM inactive_users_summary
WHERE registered_courses_count > 0 WHERE enrollment_count > 0
ORDER BY registration_date DESC; ORDER BY registration_date DESC;
--Курсы с самым высоким процентом завершения --Курсы с самым высоким процентом завершения
@@ -350,10 +376,9 @@ LIMIT 5;
-- топ 5 курсов по количеству уникальных пользователей -- топ 5 курсов по количеству уникальных пользователей
SELECT SELECT
course_title, course_title,
uniqExact(user_id) AS active_users unique_users
FROM lesson_popularity_summary FROM lesson_popularity_summary
GROUP BY course_title ORDER BY unique_users DESC
ORDER BY active_users DESC
LIMIT 5; LIMIT 5;
--новые пользователи за прошлый месяц --новые пользователи за прошлый месяц
@@ -368,7 +393,7 @@ ORDER BY registration_date DESC;
/* /*
### ✅ **Задание 6: Сравни данные с Greenplum** ### ✅ **Задание 6: Сравни данные с Greenplum**
1. Выбери 2–3 значения из таблиц `_summary_source` в Greenplum 1. Выбери 2–3 значения из таблиц `_summary_source` в Greenplum
2. Сравни с ClickHouse-результатами: 2. Сравни с ClickHouse-результатами:
- Совпадает ли `SUM`, `AVG`, `MIN`, `MAX` - Совпадает ли `SUM`, `AVG`, `MIN`, `MAX`
@@ -382,4 +407,3 @@ ORDER BY registration_date DESC;
С этим даже траблы были при пет проекте, кликхаус тяжело обрабатывает нулл значения С этим даже траблы были при пет проекте, кликхаус тяжело обрабатывает нулл значения
*/ */