миграция таблиц на ReplicatedMergeTree с поддержкой кластера
добавил примеры для проверки
This commit is contained in:
@@ -1,51 +1,71 @@
|
|||||||
CREATE TABLE ybirk.core_user (
|
CREATE TABLE ybirk.core_user ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
user_id Int32,
|
user_id Int32,
|
||||||
name String,
|
name String,
|
||||||
age Int32,
|
age Int32,
|
||||||
email String,
|
email String,
|
||||||
registration_date Date
|
registration_date Date
|
||||||
)
|
)
|
||||||
ENGINE = MergeTree
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/core_user',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY user_id;
|
ORDER BY user_id;
|
||||||
|
|
||||||
CREATE TABLE ybirk.core_course (
|
CREATE TABLE ybirk.core_course ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
course_id Int32,
|
course_id Int32,
|
||||||
title String,
|
title String,
|
||||||
category String
|
category String
|
||||||
)
|
)
|
||||||
ENGINE = MergeTree
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/core_course',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY course_id;
|
ORDER BY course_id;
|
||||||
|
|
||||||
CREATE TABLE ybirk.core_lesson (
|
CREATE TABLE ybirk.core_lesson ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
lesson_id Int32,
|
lesson_id Int32,
|
||||||
title String,
|
title String,
|
||||||
duration_min Int32,
|
duration_min Int32,
|
||||||
course_id Int32
|
course_id Int32
|
||||||
)
|
)
|
||||||
ENGINE = MergeTree
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/core_lesson',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY lesson_id;
|
ORDER BY lesson_id;
|
||||||
|
|
||||||
CREATE TABLE ybirk.core_fact_lesson_views (
|
CREATE TABLE ybirk.core_fact_lesson_views ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
user_id Int32,
|
user_id Int32,
|
||||||
lesson_id Int32,
|
lesson_id Int32,
|
||||||
course_id Int32,
|
course_id Int32,
|
||||||
viewed_at DateTime64(3)
|
viewed_at DateTime64(3)
|
||||||
)
|
)
|
||||||
ENGINE = MergeTree
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/core_fact_lesson_views',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY user_id;
|
ORDER BY user_id;
|
||||||
|
|
||||||
CREATE TABLE ybirk.core_enrollments (
|
CREATE TABLE ybirk.core_enrollments ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
id Int32,
|
id Int32,
|
||||||
user_id Int32,
|
user_id Int32,
|
||||||
course_id Int32,
|
course_id Int32,
|
||||||
enrolled_at Date
|
enrolled_at Date
|
||||||
)
|
)
|
||||||
ENGINE = MergeTree
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/core_enrollments',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY user_id;
|
ORDER BY user_id;
|
||||||
|
|
||||||
----------------------------------
|
--------------------------------
|
||||||
|
|
||||||
CREATE TABLE ybirk.inactive_users_summary
|
CREATE TABLE ybirk.inactive_users_summary ON CLUSTER clickhouse_cluster
|
||||||
(
|
(
|
||||||
user_id UInt32,
|
user_id UInt32,
|
||||||
name String,
|
name String,
|
||||||
@@ -54,11 +74,13 @@ age UInt8,
|
|||||||
registered_courses_count UInt32,
|
registered_courses_count UInt32,
|
||||||
registration_date DateTime64(3, 'UTC')
|
registration_date DateTime64(3, 'UTC')
|
||||||
)
|
)
|
||||||
ENGINE = AggregatingMergeTree
|
ENGINE = ReplicatedAggregatingMergeTree(
|
||||||
ORDER BY (user_id);
|
'/clickhouse/tables/{shard}/ybirk/inactive_users_summary',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY user_id;
|
||||||
|
|
||||||
|
CREATE TABLE ybirk.lesson_popularity_summary ON CLUSTER clickhouse_cluster
|
||||||
CREATE TABLE ybirk.lesson_popularity_summary
|
|
||||||
(
|
(
|
||||||
lesson_id UInt32,
|
lesson_id UInt32,
|
||||||
lesson_title String,
|
lesson_title String,
|
||||||
@@ -69,11 +91,13 @@ CREATE TABLE ybirk.lesson_popularity_summary
|
|||||||
first_view DateTime64(3, 'UTC'),
|
first_view DateTime64(3, 'UTC'),
|
||||||
last_view DateTime64(3, 'UTC')
|
last_view DateTime64(3, 'UTC')
|
||||||
)
|
)
|
||||||
ENGINE = AggregatingMergeTree
|
ENGINE = ReplicatedAggregatingMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/lesson_popularity_summary',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY (lesson_id, course_id);
|
ORDER BY (lesson_id, course_id);
|
||||||
|
|
||||||
|
CREATE TABLE ybirk.course_completion_rate ON CLUSTER clickhouse_cluster
|
||||||
CREATE TABLE ybirk.course_completion_rate
|
|
||||||
(
|
(
|
||||||
user_id UInt32,
|
user_id UInt32,
|
||||||
user_name String,
|
user_name String,
|
||||||
@@ -83,12 +107,15 @@ CREATE TABLE ybirk.course_completion_rate
|
|||||||
lessons_viewed UInt32,
|
lessons_viewed UInt32,
|
||||||
completion_rate Float32
|
completion_rate Float32
|
||||||
)
|
)
|
||||||
ENGINE = AggregatingMergeTree
|
ENGINE = ReplicatedAggregatingMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/ybirk/course_completion_rate',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
ORDER BY (user_id, course_id);
|
ORDER BY (user_id, course_id);
|
||||||
|
|
||||||
-------------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW ybirk.mv_lesson_popularity_summary
|
CREATE MATERIALIZED VIEW ybirk.mv_lesson_popularity_summary ON CLUSTER clickhouse_cluster
|
||||||
TO ybirk.lesson_popularity_summary
|
TO ybirk.lesson_popularity_summary
|
||||||
AS
|
AS
|
||||||
SELECT
|
SELECT
|
||||||
@@ -109,7 +136,7 @@ GROUP BY
|
|||||||
flv.course_id,
|
flv.course_id,
|
||||||
c.title;
|
c.title;
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW ybirk.mv_inactive_users_summary
|
CREATE MATERIALIZED VIEW ybirk.mv_inactive_users_summary ON CLUSTER clickhouse_cluster
|
||||||
TO ybirk.inactive_users_summary
|
TO ybirk.inactive_users_summary
|
||||||
AS
|
AS
|
||||||
SELECT
|
SELECT
|
||||||
@@ -132,7 +159,7 @@ GROUP BY
|
|||||||
u.age,
|
u.age,
|
||||||
u.registration_date;
|
u.registration_date;
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW ybirk.mv_course_completion_rate
|
CREATE MATERIALIZED VIEW ybirk.mv_course_completion_rate ON CLUSTER clickhouse_cluster
|
||||||
TO ybirk.course_completion_rate
|
TO ybirk.course_completion_rate
|
||||||
AS
|
AS
|
||||||
SELECT
|
SELECT
|
||||||
@@ -193,3 +220,60 @@ INSERT INTO ybirk.core_enrollments (id, user_id, course_id, enrolled_at) VALUES
|
|||||||
(3, 2, 1, '2023-01-20'),
|
(3, 2, 1, '2023-01-20'),
|
||||||
(4, 3, 2, '2023-03-05'),
|
(4, 3, 2, '2023-03-05'),
|
||||||
(5, 4, 3, '2023-04-01');
|
(5, 4, 3, '2023-04-01');
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
--Примеры
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
lesson_title,
|
||||||
|
course_title,
|
||||||
|
total_views
|
||||||
|
FROM ybirk.mv_lesson_popularity_summary
|
||||||
|
ORDER BY total_views DESC
|
||||||
|
LIMIT 5;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
name,
|
||||||
|
email,
|
||||||
|
registered_courses_count
|
||||||
|
FROM ybirk.inactive_users_summary
|
||||||
|
WHERE registered_courses_count > 0
|
||||||
|
ORDER BY registration_date DESC;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
course_title,
|
||||||
|
AVG(completion_rate) AS avg_completion
|
||||||
|
FROM ybirk.course_completion_rate
|
||||||
|
GROUP BY course_title
|
||||||
|
ORDER BY avg_completion DESC
|
||||||
|
LIMIT 5;
|
||||||
|
|
||||||
|
-- ЗАпросы
|
||||||
|
|
||||||
|
-- самый популярный курс
|
||||||
|
SELECT
|
||||||
|
course_title,
|
||||||
|
SUM(total_views) as sum_views
|
||||||
|
FROM ybirk.mv_lesson_popularity_summary
|
||||||
|
GROUP BY course_title
|
||||||
|
ORDER BY sum_views DESC;
|
||||||
|
|
||||||
|
|
||||||
|
-- Кто застрял
|
||||||
|
SELECT
|
||||||
|
user_name,
|
||||||
|
course_title,
|
||||||
|
completion_rate
|
||||||
|
FROM ybirk.mv_course_completion_rate
|
||||||
|
WHERE completion_rate > 0 AND completion_rate < 1.0;
|
||||||
|
|
||||||
|
-- тест3
|
||||||
|
SELECT
|
||||||
|
t1.user_name,
|
||||||
|
t1.course_title,
|
||||||
|
t2.email
|
||||||
|
FROM ybirk.mv_course_completion_rate AS t1
|
||||||
|
JOIN ybirk.mv_inactive_users_summary AS t2
|
||||||
|
ON t1.user_id = t2.user_id
|
||||||
|
WHERE t1.completion_rate = 1.0;
|
||||||
Reference in New Issue
Block a user