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