ИЗМЕНЕНО - Пет-проект: Витринный слой. Задание 2: Подготовь структуру витрины lesson_popularity_summary.
This commit is contained in:
+101
-72
@@ -1,56 +1,4 @@
|
|||||||
-- Вариант 1(не работает):
|
--DROP TABLE mnoskov.lesson_popularity_summary ON CLUSTER clickhouse_cluster sync;
|
||||||
CREATE TABLE mnoskov.lesson_popularity_summary
|
|
||||||
ON CLUSTER clickhouse_cluster
|
|
||||||
(
|
|
||||||
lesson_id UInt64,
|
|
||||||
lesson_title String,
|
|
||||||
course_id UInt64,
|
|
||||||
course_title String,
|
|
||||||
total_views UInt64,
|
|
||||||
unique_users UInt64,
|
|
||||||
first_view DateTime,
|
|
||||||
last_view DateTime
|
|
||||||
)
|
|
||||||
ENGINE = ReplicatedMergeTree(
|
|
||||||
'/clickhouse/tables/{shard}/mnoskov/lesson_popularity_summary',
|
|
||||||
'{replica}'
|
|
||||||
)
|
|
||||||
ORDER BY lesson_id;
|
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW mnoskov.mv_lesson_popularity_summary
|
|
||||||
ON CLUSTER clickhouse_cluster
|
|
||||||
TO mnoskov.lesson_popularity_summary
|
|
||||||
AS
|
|
||||||
WITH result_flv AS (
|
|
||||||
SELECT
|
|
||||||
lesson_id,
|
|
||||||
count() AS total_views,
|
|
||||||
uniq(user_id) AS unique_users,
|
|
||||||
min(viewed_at) AS first_view,
|
|
||||||
max(viewed_at) AS last_view
|
|
||||||
FROM
|
|
||||||
mnoskov.core_fact_lesson_views flv
|
|
||||||
GROUP BY
|
|
||||||
lesson_id
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
cdl.lesson_id AS lesson_id,
|
|
||||||
cdl.title AS lesson_title,
|
|
||||||
cdc.course_id AS course_id,
|
|
||||||
cdc.title AS course_title,
|
|
||||||
rflv.total_views AS total_views,
|
|
||||||
rflv.unique_users AS unique_users,
|
|
||||||
rflv.first_view AS first_view,
|
|
||||||
rflv.last_view AS last_view
|
|
||||||
FROM
|
|
||||||
mnoskov.core_dim_lesson cdl
|
|
||||||
JOIN
|
|
||||||
mnoskov.core_dim_course cdc ON cdl.course_id = cdc.course_id
|
|
||||||
JOIN
|
|
||||||
result_flv rflv ON cdl.lesson_id = rflv.lesson_id;
|
|
||||||
|
|
||||||
|
|
||||||
-- Вариант 2(не работает):
|
|
||||||
CREATE TABLE mnoskov.lesson_popularity_summary
|
CREATE TABLE mnoskov.lesson_popularity_summary
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
(
|
(
|
||||||
@@ -66,34 +14,115 @@ ON CLUSTER clickhouse_cluster
|
|||||||
ENGINE AggregatingMergeTree
|
ENGINE AggregatingMergeTree
|
||||||
ORDER BY lesson_id;
|
ORDER BY lesson_id;
|
||||||
|
|
||||||
|
--DROP VIEW mnoskov.mv_lesson_popularity_summary ON CLUSTER clickhouse_cluster SYNC;
|
||||||
CREATE MATERIALIZED VIEW mnoskov.mv_lesson_popularity_summary
|
CREATE MATERIALIZED VIEW mnoskov.mv_lesson_popularity_summary
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
TO mnoskov.lesson_popularity_summary
|
TO mnoskov.lesson_popularity_summary
|
||||||
AS
|
AS
|
||||||
WITH result_flv AS (
|
|
||||||
SELECT
|
|
||||||
lesson_id,
|
|
||||||
countState() AS total_views,
|
|
||||||
uniqState(user_id) AS unique_users,
|
|
||||||
minState(viewed_at) AS first_view,
|
|
||||||
maxState(viewed_at) AS last_view
|
|
||||||
FROM
|
|
||||||
mnoskov.core_fact_lesson_views flv
|
|
||||||
GROUP BY
|
|
||||||
lesson_id
|
|
||||||
)
|
|
||||||
SELECT
|
SELECT
|
||||||
cdl.lesson_id AS lesson_id,
|
cdl.lesson_id AS lesson_id,
|
||||||
cdl.title AS lesson_title,
|
cdl.title AS lesson_title,
|
||||||
cdc.course_id AS course_id,
|
cdc.course_id AS course_id,
|
||||||
cdc.title AS course_title,
|
cdc.title AS course_title,
|
||||||
rflv.total_views AS total_views,
|
countIfState(flv.user_id != 0) AS total_views, -- я вообще ахуел когда узнал что такое существует(я про If у агрегаций). Я наткнулся на это когда осознал что кликхаус в join не ставит null, а ставит значение по умолчанию
|
||||||
rflv.unique_users AS unique_users,
|
uniqIfState(flv.user_id, flv.user_id != 0) AS unique_users,
|
||||||
rflv.first_view AS first_view,
|
minIfState(flv.viewed_at, flv.user_id != 0) AS first_view,
|
||||||
rflv.last_view AS last_view
|
maxIfState(flv.viewed_at, flv.user_id != 0) AS last_view
|
||||||
FROM
|
FROM
|
||||||
mnoskov.core_dim_lesson cdl
|
mnoskov.core_fact_lesson_views flv
|
||||||
|
RIGHT JOIN
|
||||||
|
mnoskov.core_dim_lesson cdl ON flv.lesson_id = cdl.lesson_id -- поидее нужно большую таблицу ставить в левую часть JOIN, но если я тут так сделаю с фактами, то запрос кореектно не будет работать
|
||||||
JOIN
|
JOIN
|
||||||
mnoskov.core_dim_course cdc ON cdl.course_id = cdc.course_id
|
mnoskov.core_dim_course cdc ON cdl.course_id = cdc.course_id
|
||||||
JOIN
|
GROUP BY
|
||||||
result_flv rflv ON cdl.lesson_id = rflv.lesson_id;
|
cdl.lesson_id, cdl.title, cdc.course_id, cdc.title;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT * FROM mnoskov.core_fact_lesson_views;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
lesson_id,
|
||||||
|
any(lesson_title),
|
||||||
|
any(course_id),
|
||||||
|
any(course_title),
|
||||||
|
countMerge(total_views) AS total_views,
|
||||||
|
uniqMerge(unique_users) AS uniq_users,
|
||||||
|
minMerge(first_view) AS first_view,
|
||||||
|
maxMerge(last_view) AS last_view
|
||||||
|
FROM
|
||||||
|
mnoskov.lesson_popularity_summary
|
||||||
|
GROUP BY
|
||||||
|
lesson_id
|
||||||
|
ORDER BY
|
||||||
|
lesson_id;
|
||||||
|
-- ЕБАТЬ КАК Я АХУЕЛ КОГДА ДОПЕР ДО ТОГО ЧТО ЭТО НУЖНО ЧИТАТЬ ТАКИМ СПОСОБОМ А НЕ ПРОСТО ЧЕРЕЗ ЗВЕЗДОЧКУ. У меня MV ебать сколько изменений потерпела чтобы заработать, а проблема возможно изначально была в чтении.
|
||||||
|
-- Правда оно читается через раз, то есть результат то нет, но думаю это проблема движка AggregatingMergeTree.
|
||||||
|
-- Это получается чтобы был удобный вывод, теперь поверх этого селекта можно сделать обычную VIEW?
|
||||||
|
|
||||||
|
-- Заполненния и очищения:
|
||||||
|
TRUNCATE TABLE mnoskov.core_fact_lesson_views
|
||||||
|
ON CLUSTER clickhouse_cluster sync;
|
||||||
|
|
||||||
|
TRUNCATE TABLE mnoskov.lesson_popularity_summary
|
||||||
|
ON CLUSTER clickhouse_cluster sync;
|
||||||
|
|
||||||
|
INSERT INTO mnoskov.core_fact_lesson_views (user_id, lesson_id, course_id, viewed_at)
|
||||||
|
VALUES
|
||||||
|
(3, 6, 2, '2023-03-06 12:00:00'),
|
||||||
|
(4, 9, 3, '2023-04-02 10:00:00'),
|
||||||
|
(4, 6, 2, '2023-03-12 14:00:00'),
|
||||||
|
(4, 7, 2, '2023-03-13 09:00:00'),
|
||||||
|
(6, 3, 1, '2023-01-08 09:00:00'),
|
||||||
|
(6, 6, 2, '2023-01-11 14:00:00'),
|
||||||
|
(6, 7, 2, '2023-01-12 10:00:00'),
|
||||||
|
(6, 8, 2, '2023-01-13 11:00:00'),
|
||||||
|
(6, 9, 3, '2023-03-09 11:00:00'),
|
||||||
|
(7, 9, 3, '2023-03-11 14:00:00'),
|
||||||
|
(2, 9, 3, '2023-03-16 10:00:00'),
|
||||||
|
(2, 10, 3, '2023-03-16 10:30:00'),
|
||||||
|
(3, 2, 1, '2023-02-26 11:20:00'),
|
||||||
|
(4, 10, 3, '2023-04-03 10:00:00'),
|
||||||
|
(6, 2, 1, '2023-01-07 10:15:00'),
|
||||||
|
(6, 4, 1, '2023-01-08 09:30:00'),
|
||||||
|
(6, 13, 4, '2023-02-06 09:30:00'),
|
||||||
|
(7, 2, 1, '2023-01-14 10:20:00'),
|
||||||
|
(7, 3, 1, '2023-01-15 09:00:00'),
|
||||||
|
(7, 10, 3, '2023-03-11 14:30:00'),
|
||||||
|
(9, 13, 4, '2023-02-13 10:30:00'),
|
||||||
|
(13, 6, 2, '2023-01-20 14:00:00'),
|
||||||
|
(13, 7, 2, '2023-01-21 10:00:00'),
|
||||||
|
(2, 1, 1, '2023-01-21 09:00:00'),
|
||||||
|
(6, 1, 1, '2023-01-07 10:00:00'),
|
||||||
|
(6, 14, 4, '2023-02-07 10:00:00'),
|
||||||
|
(7, 1, 1, '2023-01-14 10:00:00'),
|
||||||
|
(9, 12, 4, '2023-02-13 10:00:00'),
|
||||||
|
(9, 1, 1, '2023-02-16 11:00:00'),
|
||||||
|
(3, 1, 1, '2023-02-26 11:00:00'),
|
||||||
|
(6, 5, 1, '2023-01-09 10:00:00'),
|
||||||
|
(6, 12, 4, '2023-02-06 09:00:00'),
|
||||||
|
(13, 12, 4, '2023-02-21 09:00:00'),
|
||||||
|
(1, 2, 1, '2023-01-16 10:15:00'),
|
||||||
|
(1, 3, 1, '2023-01-17 09:00:00'),
|
||||||
|
(1, 4, 1, '2023-01-17 09:30:00'),
|
||||||
|
(1, 4, 1, '2023-01-18 10:00:00'),
|
||||||
|
(1, 6, 2, '2023-02-02 14:00:00'),
|
||||||
|
(1, 13, 4, '2023-02-15 10:30:00'),
|
||||||
|
(5, 16, 5, '2023-03-22 11:00:00'),
|
||||||
|
(12, 2, 1, '2023-01-17 10:20:00'),
|
||||||
|
(12, 3, 1, '2023-04-10 11:30:00'),
|
||||||
|
(14, 2, 1, '2023-01-09 08:15:00'),
|
||||||
|
(14, 4, 1, '2023-01-10 10:30:00'),
|
||||||
|
(14, 6, 2, '2023-01-10 14:00:00'),
|
||||||
|
(14, 9, 3, '2023-01-10 08:00:00'),
|
||||||
|
(1, 4, 1, '2023-01-17 11:00:00'),
|
||||||
|
(12, 9, 3, '2023-03-12 10:00:00'),
|
||||||
|
(14, 3, 1, '2023-01-10 10:00:00'),
|
||||||
|
(14, 7, 2, '2023-01-11 10:00:00'),
|
||||||
|
(14, 8, 2, '2023-01-12 11:00:00'),
|
||||||
|
(1, 12, 4, '2023-02-15 10:00:00'),
|
||||||
|
(12, 1, 1, '2023-01-17 10:00:00'),
|
||||||
|
(14, 5, 1, '2023-01-11 09:00:00'),
|
||||||
|
(1, 1, 1, '2023-01-16 10:00:00'),
|
||||||
|
(5, 15, 5, '2023-03-21 10:00:00'),
|
||||||
|
(12, 1, 1, '2023-04-10 11:00:00'),
|
||||||
|
(14, 1, 1, '2023-01-09 08:00:00');
|
||||||
Reference in New Issue
Block a user