Исправился по всем замечаниям
This commit is contained in:
@@ -86,6 +86,8 @@ ORDER BY (lesson_id, course_id);
|
|||||||
- Дата первого и последнего просмотра
|
- Дата первого и последнего просмотра
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
-- Основная таблица с AggregatingMergeTree
|
||||||
|
|
||||||
CREATE TABLE bhabibullin.lesson_popularity_summary
|
CREATE TABLE bhabibullin.lesson_popularity_summary
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
(
|
(
|
||||||
@@ -93,18 +95,19 @@ ON CLUSTER clickhouse_cluster
|
|||||||
lesson_title String,
|
lesson_title String,
|
||||||
course_id UInt32,
|
course_id UInt32,
|
||||||
course_title String,
|
course_title String,
|
||||||
total_views UInt32,
|
total_views AggregateFunction(sum, UInt64),
|
||||||
unique_users UInt32,
|
unique_users AggregateFunction(uniq, UInt32),
|
||||||
first_view DateTime64(3, 'UTC'),
|
first_view AggregateFunction(min, DateTime64(3, 'UTC')),
|
||||||
last_view DateTime64(3, 'UTC')
|
last_view AggregateFunction(max, DateTime64(3, 'UTC'))
|
||||||
)
|
)
|
||||||
ENGINE = ReplicatedMergeTree(
|
ENGINE = ReplicatedAggregatingMergeTree(
|
||||||
'/clickhouse/tables/{shard}/bhabibullin/lesson_popularity_summary',
|
'/clickhouse/tables/{shard}/bhabibullin/lesson_popularity_summary',
|
||||||
'{replica}'
|
'{replica}'
|
||||||
)
|
)
|
||||||
ORDER BY (lesson_id, course_id);
|
ORDER BY (lesson_id, course_id)
|
||||||
|
SETTINGS index_granularity = 8192;
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW mv_lesson_popularity_summary
|
CREATE MATERIALIZED VIEW bhabibullin.mv_lesson_popularity_summary
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
TO bhabibullin.lesson_popularity_summary
|
TO bhabibullin.lesson_popularity_summary
|
||||||
AS
|
AS
|
||||||
@@ -113,13 +116,13 @@ SELECT
|
|||||||
l.title AS lesson_title,
|
l.title AS lesson_title,
|
||||||
flv.course_id AS course_id,
|
flv.course_id AS course_id,
|
||||||
c.title AS course_title,
|
c.title AS course_title,
|
||||||
count() AS total_views,
|
sumState(1) AS total_views,
|
||||||
uniqExact(flv.user_id) AS unique_users,
|
uniqState(flv.user_id) AS unique_users,
|
||||||
min(flv.viewed_at) AS first_view,
|
minState(flv.viewed_at) AS first_view,
|
||||||
max(flv.viewed_at) AS last_view
|
maxState(flv.viewed_at) AS last_view
|
||||||
FROM core_fact_lesson_views AS flv
|
FROM core_fact_lesson_views AS flv
|
||||||
JOIN core_dim_lesson AS l ON flv.lesson_id = l.lesson_id
|
JOIN core_dim_lesson AS l ON flv.lesson_id = l.lesson_id
|
||||||
JOIN core_dim_course AS c ON flv.course_id = c.course_id
|
JOIN core_dim_course AS c ON flv.course_id = c.course_id
|
||||||
GROUP BY
|
GROUP BY
|
||||||
flv.lesson_id,
|
flv.lesson_id,
|
||||||
l.title,
|
l.title,
|
||||||
@@ -189,21 +192,24 @@ ORDER BY user_id;
|
|||||||
|
|
||||||
CREATE MATERIALIZED VIEW bhabibullin.mv_inactive_users_summary
|
CREATE MATERIALIZED VIEW bhabibullin.mv_inactive_users_summary
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
to bhabibullin.inactive_users_summary
|
TO bhabibullin.inactive_users_summary
|
||||||
AS
|
AS
|
||||||
SELECT
|
SELECT
|
||||||
cdu.user_id,
|
cdu.user_id,
|
||||||
cdu.name,
|
cdu.name,
|
||||||
cdu.email,
|
cdu.email,
|
||||||
cdu.age,
|
cdu.age,
|
||||||
0 as enrollment_count,
|
countDistinct(flv.course_id) as enrollment_count,
|
||||||
cdu.registration_date
|
cdu.registration_date
|
||||||
FROM core_dim_user cdu
|
FROM core_dim_user cdu
|
||||||
WHERE (cdu.user_id, 1) NOT IN (
|
LEFT ANTI JOIN core_fact_lesson_views flv
|
||||||
SELECT user_id, 1
|
ON cdu.user_id = flv.user_id
|
||||||
FROM core_enrollments
|
GROUP BY
|
||||||
GROUP BY user_id
|
cdu.user_id,
|
||||||
);
|
cdu.name,
|
||||||
|
cdu.email,
|
||||||
|
cdu.age,
|
||||||
|
cdu.registration_date;
|
||||||
|
|
||||||
INSERT INTO bhabibullin.inactive_users_summary
|
INSERT INTO bhabibullin.inactive_users_summary
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -119,16 +119,14 @@ SELECT
|
|||||||
dl.title AS lesson_title,
|
dl.title AS lesson_title,
|
||||||
dc.course_id,
|
dc.course_id,
|
||||||
dc.title AS course_title,
|
dc.title AS course_title,
|
||||||
COUNT(flv.lesson_id) AS total_views,
|
COUNT(*) AS total_views,
|
||||||
COUNT(DISTINCT du.user_id) AS unique_users,
|
COUNT(DISTINCT flv.user_id) AS unique_users,
|
||||||
MIN(flv.viewed_at) AS first_view,
|
MIN(flv.viewed_at) AS first_view,
|
||||||
MAX(flv.viewed_at) AS last_view
|
MAX(flv.viewed_at) AS last_view
|
||||||
FROM core.dim_lesson dl
|
FROM core.dim_lesson dl
|
||||||
JOIN core.dim_course dc ON dc.course_id = dl.course_id
|
JOIN core.dim_course dc ON dc.course_id = dl.course_id
|
||||||
JOIN core.fact_lesson_views flv ON flv.lesson_id = dl.lesson_id
|
JOIN core.fact_lesson_views flv ON flv.lesson_id = dl.lesson_id
|
||||||
JOIN core.dim_user du ON du.user_id = flv.user_id
|
GROUP BY dl.lesson_id, dl.title, dc.course_id, dc.title;
|
||||||
GROUP BY dl.lesson_id, dl.title, dc.course_id, dc.title
|
|
||||||
ORDER BY dl.lesson_id;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -155,12 +153,15 @@ SELECT
|
|||||||
du.name AS user_name,
|
du.name AS user_name,
|
||||||
du.email,
|
du.email,
|
||||||
du.age,
|
du.age,
|
||||||
COUNT(e.course_id) AS enrollments_count,
|
COUNT(DISTINCT e.course_id) AS enrollments_count,
|
||||||
du.registration_date
|
du.registration_date
|
||||||
FROM core.dim_user du
|
FROM core.dim_user du
|
||||||
LEFT JOIN core.enrollments e ON e.user_id = du.user_id
|
LEFT JOIN core.enrollments e ON e.user_id = du.user_id
|
||||||
LEFT JOIN core.fact_lesson_views flv ON flv.user_id = du.user_id
|
WHERE NOT EXISTS (
|
||||||
WHERE flv.user_id IS NULL
|
SELECT 1
|
||||||
|
FROM core.fact_lesson_views flv
|
||||||
|
WHERE flv.user_id = du.user_id
|
||||||
|
)
|
||||||
GROUP BY du.user_id, du.name, du.email, du.age, du.registration_date;
|
GROUP BY du.user_id, du.name, du.email, du.age, du.registration_date;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -90,12 +90,10 @@ select
|
|||||||
count(distinct lv.lesson_id) as viewed_lessons_count,
|
count(distinct lv.lesson_id) as viewed_lessons_count,
|
||||||
max(lv.viewed_at) as last_view,
|
max(lv.viewed_at) as last_view,
|
||||||
min(lv.viewed_at) as first_view,
|
min(lv.viewed_at) as first_view,
|
||||||
round(
|
round(count(distinct lv.lesson_id) * 100.0 / NULLIF(al.cnt_lesson, 0), 4) as engagement_rate
|
||||||
count(distinct lv.lesson_id) * 100.0 / al.cnt_lesson
|
|
||||||
,2) || '%' as engagegement_rate
|
|
||||||
from users u
|
from users u
|
||||||
join enrollments e on u.id = e.user_id
|
join enrollments e on u.id = e.user_id
|
||||||
join lesson_views lv on lv.user_id = u.id
|
left join lesson_views lv on lv.user_id = u.id
|
||||||
join available_lessons al on al.user_id = u.id
|
join available_lessons al on al.user_id = u.id
|
||||||
group by u.id, u.name, al.cnt_lesson
|
group by u.id, u.name, al.cnt_lesson
|
||||||
);
|
);
|
||||||
@@ -136,7 +134,7 @@ from
|
|||||||
join lessons l on c.id = l.course_id
|
join lessons l on c.id = l.course_id
|
||||||
join enrollments e on e.course_id = c.id
|
join enrollments e on e.course_id = c.id
|
||||||
join view_cnt vc on vc.course_id = c.id
|
join view_cnt vc on vc.course_id = c.id
|
||||||
join lesson_views lv on lv.lesson_id = l.id
|
left join lesson_views lv on lv.lesson_id = l.id
|
||||||
group by c.title, vc.cnt, c.id
|
group by c.title, vc.cnt, c.id
|
||||||
order by course_id
|
order by course_id
|
||||||
);
|
);
|
||||||
@@ -162,8 +160,8 @@ select
|
|||||||
count(distinct c.id) as total_courses,
|
count(distinct c.id) as total_courses,
|
||||||
count(distinct l.id) as total_lessons,
|
count(distinct l.id) as total_lessons,
|
||||||
count(distinct lv.user_id) as users_with_views,
|
count(distinct lv.user_id) as users_with_views,
|
||||||
round(count(distinct l.id) * 1.0 / count(distinct c.id), 2) as avg_lessons_per_course,
|
round(count(distinct l.id) * 1.0 / NULLIF(count(distinct c.id), 0), 2) as avg_lessons_per_course,
|
||||||
count(lv.lesson_id) * 1.0 / count(distinct l.id) as avg_lessons_per_lesson
|
count(lv.lesson_id) * 1.0 / NULLIF(count(distinct l.id), 0) as avg_lessons_per_lesson
|
||||||
from users u
|
from users u
|
||||||
left join lesson_views lv on lv.user_id = u.id
|
left join lesson_views lv on lv.user_id = u.id
|
||||||
left join lessons l on l.id = lv.lesson_id
|
left join lessons l on l.id = lv.lesson_id
|
||||||
|
|||||||
Reference in New Issue
Block a user