Пет-проект: Витринный слой. Задание 4: Создай витрину course_completion_rate
This commit is contained in:
+117
@@ -0,0 +1,117 @@
|
|||||||
|
--DROP TABLE mnoskov.course_completion_rate ON CLUSTER clickhouse_cluster sync;
|
||||||
|
CREATE TABLE mnoskov.course_completion_rate
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
user_id UInt64,
|
||||||
|
user_name String,
|
||||||
|
course_id UInt64,
|
||||||
|
course_title String,
|
||||||
|
lessons_in_course UInt16,
|
||||||
|
lesson_viewed UInt16,
|
||||||
|
completion_rate Float32
|
||||||
|
)
|
||||||
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/mnoskov/course_completion_rate',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY (user_id, course_id);
|
||||||
|
|
||||||
|
--DROP VIEW mnoskov.mv_course_completion_rate ON CLUSTER clickhouse_cluster sync;
|
||||||
|
CREATE MATERIALIZED VIEW mnoskov.mv_course_completion_rate
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
TO mnoskov.course_completion_rate
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
u.user_id AS user_id,
|
||||||
|
u.name AS user_name,
|
||||||
|
cl.course_id AS course_id,
|
||||||
|
cl.course_title AS course_title,
|
||||||
|
cl.lessons_in_course AS lessons_in_course,
|
||||||
|
lv.lesson_viewed AS lesson_viewed,
|
||||||
|
ifnull(round(toFloat32(ifnull(lv.lesson_viewed, 0)) / nullif(cl.lessons_in_course, 0), 2), 0) AS completion_rate -- вроде все логично
|
||||||
|
FROM
|
||||||
|
mnoskov.core_enrollments e
|
||||||
|
RIGHT JOIN
|
||||||
|
mnoskov.core_dim_user u ON e.user_id = u.user_id
|
||||||
|
JOIN (
|
||||||
|
SELECT
|
||||||
|
c.course_id,
|
||||||
|
c.title AS course_title,
|
||||||
|
uniq(lesson_id) lessons_in_course
|
||||||
|
FROM
|
||||||
|
mnoskov.core_dim_course c
|
||||||
|
JOIN
|
||||||
|
mnoskov.core_dim_lesson l ON l.course_id = c.course_id
|
||||||
|
GROUP BY
|
||||||
|
c.course_id, c.title
|
||||||
|
) cl ON e.course_id = cl.course_id
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
course_id,
|
||||||
|
uniq(lesson_id) AS lesson_viewed
|
||||||
|
FROM
|
||||||
|
mnoskov.core_fact_lesson_views
|
||||||
|
GROUP BY
|
||||||
|
user_id, course_id
|
||||||
|
) lv ON e.user_id = lv.user_id AND e.course_id = lv.course_id
|
||||||
|
ORDER BY
|
||||||
|
u.user_id, e.course_id;
|
||||||
|
|
||||||
|
-- Чтение очищение заполнение
|
||||||
|
SHOW TABLES FROM mnoskov;
|
||||||
|
|
||||||
|
SELECT * FROM mnoskov.core_enrollments;
|
||||||
|
SELECT * FROM mnoskov.course_completion_rate;
|
||||||
|
|
||||||
|
TRUNCATE TABLE mnoskov.core_enrollments ON CLUSTER clickhouse_cluster sync;
|
||||||
|
TRUNCATE TABLE mnoskov.course_completion_rate ON CLUSTER clickhouse_cluster sync;
|
||||||
|
|
||||||
|
INSERT INTO mnoskov.core_enrollments
|
||||||
|
(user_id, course_id, enrolled_at)
|
||||||
|
VALUES
|
||||||
|
(6, 1, '2023-01-05 23:00:00'),
|
||||||
|
(14, 2, '2023-01-08 23:00:00'),
|
||||||
|
(14, 3, '2023-01-08 23:00:00'),
|
||||||
|
(14, 1, '2023-01-08 23:00:00'),
|
||||||
|
(6, 2, '2023-01-09 23:00:00'),
|
||||||
|
(15, 1, '2023-01-10 23:00:00'),
|
||||||
|
(7, 1, '2023-01-12 23:00:00'),
|
||||||
|
(1, 1, '2023-01-14 23:00:00'),
|
||||||
|
(12, 1, '2023-01-15 23:00:00'),
|
||||||
|
(13, 2, '2023-01-18 23:00:00'),
|
||||||
|
(2, 1, '2023-01-19 23:00:00'),
|
||||||
|
(8, 3, '2023-01-21 23:00:00'),
|
||||||
|
(8, 1, '2023-01-21 23:00:00'),
|
||||||
|
(8, 2, '2023-01-21 23:00:00'),
|
||||||
|
(1, 2, '2023-01-31 23:00:00'),
|
||||||
|
(7, 2, '2023-01-31 23:00:00'),
|
||||||
|
(14, 4, '2023-01-31 23:00:00'),
|
||||||
|
(15, 2, '2023-01-31 23:00:00'),
|
||||||
|
(6, 4, '2023-02-04 23:00:00'),
|
||||||
|
(1, 4, '2023-02-09 23:00:00'),
|
||||||
|
(9, 4, '2023-02-11 23:00:00'),
|
||||||
|
(9, 1, '2023-02-14 23:00:00'),
|
||||||
|
(16, 2, '2023-02-15 23:00:00'),
|
||||||
|
(16, 4, '2023-02-15 23:00:00'),
|
||||||
|
(13, 4, '2023-02-19 23:00:00'),
|
||||||
|
(3, 1, '2023-02-24 23:00:00'),
|
||||||
|
(3, 2, '2023-03-04 23:00:00'),
|
||||||
|
(15, 3, '2023-03-04 23:00:00'),
|
||||||
|
(6, 3, '2023-03-07 23:00:00'),
|
||||||
|
(4, 2, '2023-03-09 23:00:00'),
|
||||||
|
(7, 3, '2023-03-09 23:00:00'),
|
||||||
|
(12, 3, '2023-03-09 23:00:00'),
|
||||||
|
(2, 3, '2023-03-14 23:00:00'),
|
||||||
|
(5, 5, '2023-03-19 23:00:00'),
|
||||||
|
(14, 5, '2023-03-19 23:00:00'),
|
||||||
|
(17, 3, '2023-03-21 23:00:00'),
|
||||||
|
(17, 5, '2023-03-24 23:00:00'),
|
||||||
|
(4, 3, '2023-03-31 23:00:00'),
|
||||||
|
(18, 1, '2023-04-01 23:00:00'),
|
||||||
|
(18, 4, '2023-04-04 23:00:00'),
|
||||||
|
(19, 1, '2023-04-10 23:00:00'),
|
||||||
|
(19, 2, '2023-04-10 23:00:00'),
|
||||||
|
(10, 1, '2023-04-15 23:00:00'),
|
||||||
|
(20, 2, '2023-04-18 23:00:00'),
|
||||||
|
(11, 2, '2023-04-20 23:00:00');
|
||||||
Reference in New Issue
Block a user