Пет-проект Greenplum (полностью)
This commit is contained in:
@@ -0,0 +1,105 @@
|
|||||||
|
--Витрина dm.lesson_popularity_summary
|
||||||
|
CREATE MATERIALIZED VIEW dm.lesson_popularity_summary as
|
||||||
|
select
|
||||||
|
l.lesson_id,
|
||||||
|
l.title as lesson_title,
|
||||||
|
c.course_id,
|
||||||
|
c.title as course_title,
|
||||||
|
COUNT(f.user_id) as total_views,
|
||||||
|
COUNT(DISTINCT f.user_id) as unique_users,
|
||||||
|
MIN(f.viewed_at) as first_view,
|
||||||
|
MAX(f.viewed_at) as last_view
|
||||||
|
FROM core.fact_lesson_views f
|
||||||
|
JOIN core.dim_lesson l
|
||||||
|
ON f.lesson_id = l.lesson_id
|
||||||
|
JOIN core.dim_course c
|
||||||
|
ON l.course_id = c.course_id
|
||||||
|
GROUP BY
|
||||||
|
l.lesson_id,
|
||||||
|
l.title,
|
||||||
|
c.course_id,
|
||||||
|
c.title
|
||||||
|
order by lesson_id;
|
||||||
|
|
||||||
|
select * from dm.lesson_popularity_summary;
|
||||||
|
|
||||||
|
--Удалил лишний индекс
|
||||||
|
DROP INDEX core.idx_fact_views_course_id;
|
||||||
|
|
||||||
|
-- Все индексы для CORE-таблиц
|
||||||
|
SELECT
|
||||||
|
tablename,
|
||||||
|
indexname,
|
||||||
|
indexdef
|
||||||
|
FROM pg_indexes
|
||||||
|
WHERE schemaname = 'core'
|
||||||
|
AND tablename IN (
|
||||||
|
'dim_course',
|
||||||
|
'dim_date',
|
||||||
|
'dim_lesson',
|
||||||
|
'dim_user',
|
||||||
|
'enrollments',
|
||||||
|
'fact_lesson_views'
|
||||||
|
)
|
||||||
|
ORDER by indexname, tablename;
|
||||||
|
|
||||||
|
|
||||||
|
--Витрина dm.inactive_users_summary
|
||||||
|
CREATE MATERIALIZED VIEW dm.inactive_users_summary as
|
||||||
|
select
|
||||||
|
du.user_id,
|
||||||
|
du.name as user_name,
|
||||||
|
du.email,
|
||||||
|
du.age,
|
||||||
|
COUNT(e.course_id) as enrollments_count,
|
||||||
|
du.registration_date
|
||||||
|
from core.dim_user du
|
||||||
|
left join core.enrollments e
|
||||||
|
on du.user_id = e.user_id
|
||||||
|
left join core.fact_lesson_views flv
|
||||||
|
on du.user_id = flv.user_id
|
||||||
|
where flv.user_id is NULL
|
||||||
|
group by
|
||||||
|
du.user_id,
|
||||||
|
du.name,
|
||||||
|
du.email,
|
||||||
|
du.age,
|
||||||
|
du.registration_date
|
||||||
|
order by du.user_id;
|
||||||
|
|
||||||
|
select * from dm.inactive_users_summary;
|
||||||
|
|
||||||
|
--Витрина dm.course_completion_rate
|
||||||
|
CREATE MATERIALIZED VIEW dm.course_completion_rate as
|
||||||
|
select
|
||||||
|
du.user_id,
|
||||||
|
du.name as user_name,
|
||||||
|
dc.course_id,
|
||||||
|
dc.title as course_title,
|
||||||
|
COUNT(DISTINCT dl.lesson_id) AS lessons_in_course,
|
||||||
|
COUNT(DISTINCT flv.lesson_id) AS lessons_viewed,
|
||||||
|
ROUND(COUNT(DISTINCT flv.lesson_id)::numeric / NULLIF(COUNT(DISTINCT dl.lesson_id), 0), 2) AS completion_rate
|
||||||
|
from core.enrollments e
|
||||||
|
left join core.dim_user du
|
||||||
|
on du.user_id = e.user_id
|
||||||
|
left join core.dim_course dc
|
||||||
|
on dc.course_id = e.course_id
|
||||||
|
left join core.dim_lesson dl
|
||||||
|
on dl.course_id = e.course_id
|
||||||
|
left join core.fact_lesson_views flv
|
||||||
|
on flv.user_id = e.user_id
|
||||||
|
and flv.lesson_id = dl.lesson_id
|
||||||
|
group by
|
||||||
|
du.user_id,
|
||||||
|
du.name,
|
||||||
|
dc.course_id,
|
||||||
|
dc.title
|
||||||
|
order by du.user_id;
|
||||||
|
|
||||||
|
select * from dm.course_completion_rate order by user_id;
|
||||||
|
|
||||||
|
--Этап 5. Проверка
|
||||||
|
SELECT * FROM dm.lesson_popularity_summary LIMIT 10;
|
||||||
|
SELECT * FROM dm.inactive_users_summary LIMIT 10;
|
||||||
|
SELECT * FROM dm.course_completion_rate LIMIT 10;
|
||||||
|
--Все витрины отображаются корректно. Скрины: "название витрины".png
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
Reference in New Issue
Block a user