Пет-проект 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