CREATE database pet; -- Этап 1 -- Задание 1 -- Перенести данные как в пет-проекте с Greenplum -- Создаем таблицы, чтобы потом загрузить в них данные из таблиц GreenPlum -- Таблица user из GP CREATE TABLE pet.core_user ( user_id Int32, name String, age Int32, email String, registration_date Date ) ENGINE = MergeTree ORDER BY user_id; -- Таблица course из GP CREATE TABLE pet.core_course ( course_id Int32, title String, category String ) ENGINE = MergeTree ORDER BY course_id; -- Таблица lesson из GP CREATE TABLE pet.core_lesson ( lesson_id Int32, title String, duration_min Int32, course_id Int32 ) ENGINE = MergeTree ORDER BY lesson_id; -- Таблица fact_lesson_views из GP CREATE TABLE pet.core_fact_lesson_views ( user_id Int32, lesson_id Int32, course_id Int32, viewed_at DateTime64(3) ) ENGINE = MergeTree ORDER BY user_id; -- Таблица enrollments из GP CREATE TABLE pet.core_enrollments ( id Int32, user_id Int32, course_id Int32, enrolled_at Date ) ENGINE = MergeTree ORDER BY user_id; -- Этап 2. Создание витринных таблиц -- Задание 2: Подготовь структуру витрины lesson_popularity_summary -- Создаем пустую таблицу lesson_popularity_summary(структуру витрины) CREATE TABLE pet.lesson_popularity_summary ( lesson_id UInt32, 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') ) ENGINE = MergeTree ORDER BY (lesson_id, course_id); -- Создаем Materialized View CREATE MATERIALIZED VIEW pet.mv_lesson_popularity_summary TO pet.lesson_popularity_summary AS SELECT flv.lesson_id AS lesson_id, 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 FROM pet.core_fact_lesson_views AS flv JOIN pet.core_lesson AS l ON flv.lesson_id = l.lesson_id JOIN pet.core_course AS c ON flv.course_id = c.course_id GROUP BY flv.lesson_id, l.title, flv.course_id, c.title; -- Вставляем данные в таблицу pet.lesson_popularity_summary INSERT INTO pet.lesson_popularity_summary SELECT flv.lesson_id, l.title AS lesson_title, flv.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 FROM pet.core_fact_lesson_views AS flv JOIN pet.core_lesson AS l ON flv.lesson_id = l.lesson_id JOIN pet.core_course AS c ON flv.course_id = c.course_id GROUP BY flv.lesson_id, l.title, flv.course_id, c.title;