From ebc2f07fc8caaba89392b93e016ae9a99268451e Mon Sep 17 00:00:00 2001 From: SERGEY_KONEV Date: Thu, 25 Dec 2025 12:25:42 +0300 Subject: [PATCH] added STEP4.1, STEP4.2, STEP5 --- .../STEP4.1_dm.lesson_popularity_summary.sql | 42 +++++++++++++++++++ .../STEP4.2_dm.inactive_users_summary.sql | 28 +++++++++++++ .../STEP4.3_dm.course_completion_rate.sql | 3 +- skonev/greenplum/STEP5_checking.sql | 3 ++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 skonev/greenplum/STEP4.1_dm.lesson_popularity_summary.sql create mode 100644 skonev/greenplum/STEP4.2_dm.inactive_users_summary.sql create mode 100644 skonev/greenplum/STEP5_checking.sql diff --git a/skonev/greenplum/STEP4.1_dm.lesson_popularity_summary.sql b/skonev/greenplum/STEP4.1_dm.lesson_popularity_summary.sql new file mode 100644 index 0000000..ed4479e --- /dev/null +++ b/skonev/greenplum/STEP4.1_dm.lesson_popularity_summary.sql @@ -0,0 +1,42 @@ +/* + - ВИТРИНА АНАЛИЗА ПОПУЛЯРНОСТИ КАЖДОГО УРОКА + - ВСЕ УЧАСТВУЮЩИЕ ИЗМЕРЕНИЯ DISTRIBUTED REPLICATED + - ИТОГОВОЕ ПРЕДСТВАЛЕНИЕ DISTRIBUTED BY (lesson_id, course_id) + */ + +CREATE MATERIALIZED VIEW IF NOT EXISTS dm.lesson_popularity_summary AS +-- EXPLAIN ANALYZE +WITH t1 AS ( +SELECT + lesson_id, + course_id, + COUNT(lesson_id) AS total_views, + COUNT(DISTINCT user_id) AS unique_users, + MIN(viewed_at)AS first_view, + MAX(viewed_at)AS last_view +FROM core.fact_lesson_views +GROUP BY lesson_id, course_id +), +t2 AS ( +SELECT + l.lesson_id, + l.title AS lesson_title, + c.course_id, + c.title AS course_title +FROM core.dim_course c +LEFT JOIN core.dim_lesson l USING(course_id) + +) +SELECT + t1.lesson_id, + t2.lesson_title, + t1.course_id, + t2.course_title, + t1.total_views, + t1.unique_users, + t1.first_view, + t1.last_view +FROM t1 +LEFT JOIN t2 USING(lesson_id) + +DISTRIBUTED BY (lesson_id, course_id); \ No newline at end of file diff --git a/skonev/greenplum/STEP4.2_dm.inactive_users_summary.sql b/skonev/greenplum/STEP4.2_dm.inactive_users_summary.sql new file mode 100644 index 0000000..6ad6475 --- /dev/null +++ b/skonev/greenplum/STEP4.2_dm.inactive_users_summary.sql @@ -0,0 +1,28 @@ +/* + - ВИТРИНА АНАЛИЗА НЕАКТИВНЫХ ПОЛЬЗОВАТЕЛЕЙ + - ВСЕ УЧАСТВУЮЩИЕ ТАБЛИЦЫ DISTRIBUTED BY (user_id) + - ИТОГОВОЕ ПРЕДСТВАЛЕНИЕ ТАК ЖЕ DISTRIBUTED BY (user_id) + */ + + +CREATE MATERIALIZED VIEW IF NOT EXISTS dm.inactive_users_summary AS +-- EXPLAIN ANALYZE +WITH t1 AS ( +SELECT + user_id, + count(DISTINCT course_id) AS enrollments_count +FROM core.enrollments +GROUP BY user_id +) +SELECT + u.user_id, + u.name AS user_name, + u.email, + u.age, + coalesce(t1.enrollments_count, 0), + u.registration_date +FROM core.dim_user u +LEFT JOIN t1 USING (user_id) +WHERE u.user_id NOT IN (SELECT user_id FROM core.fact_lesson_views) + +DISTRIBUTED BY (user_id); \ No newline at end of file diff --git a/skonev/greenplum/STEP4.3_dm.course_completion_rate.sql b/skonev/greenplum/STEP4.3_dm.course_completion_rate.sql index 75793df..0d2c4de 100644 --- a/skonev/greenplum/STEP4.3_dm.course_completion_rate.sql +++ b/skonev/greenplum/STEP4.3_dm.course_completion_rate.sql @@ -1,9 +1,10 @@ /* - ВИТРИНА ДЛЯ АНАЛИЗА КОНВЕРСИИ ПРОХОЖДЕНИЯ КУРСА ПОЛЬЗОВАТЕЛЯМИ +- CORE.DIM_USER И CORE.FACT_LESSON_VIEWS DISTRIBUTED BY (user_id) - ИТОГОВОЕ РАСПРЕДЕЛЕНИЕ ПО (user_id, course_id) */ -CREATE MATERIALIZED VIEW dm.course_completion_rate AS +CREATE MATERIALIZED VIEW IF NOT EXISTS dm.course_completion_rate AS WITH t1 AS ( SELECT e.user_id, diff --git a/skonev/greenplum/STEP5_checking.sql b/skonev/greenplum/STEP5_checking.sql new file mode 100644 index 0000000..106fa4a --- /dev/null +++ b/skonev/greenplum/STEP5_checking.sql @@ -0,0 +1,3 @@ +SELECT * FROM dm.lesson_popularity_summary LIMIT 10; +SELECT * FROM dm.inactive_users_summary LIMIT 10; +SELECT * FROM dm.course_completion_rate LIMIT 10; \ No newline at end of file