Rebuild step 1, step 2.2 completed
This commit is contained in:
Vendored
BIN
Binary file not shown.
@@ -0,0 +1,124 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 526 KiB After Width: | Height: | Size: 114 KiB |
@@ -1,60 +0,0 @@
|
|||||||
-- Этап 1
|
|
||||||
-- Задание 1
|
|
||||||
-- Перенести данные как в пет-проекте с Greenplum
|
|
||||||
|
|
||||||
-- Не понимаю, как создавать схемы на клике из инфры, когда тут по сути одна схема с моей фамилией;
|
|
||||||
-- Буду делать без схем
|
|
||||||
|
|
||||||
-- Создаем таблицы, чтобы потом загрузить в них данные из таблиц GreenPlum
|
|
||||||
|
|
||||||
-- Таблица user из GP
|
|
||||||
CREATE TABLE dm_user (
|
|
||||||
user_id INT PRIMARY KEY,
|
|
||||||
name TEXT,
|
|
||||||
age INT,
|
|
||||||
email TEXT,
|
|
||||||
registration_date DATE
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Таблица course из GP
|
|
||||||
CREATE TABLE dm_course (
|
|
||||||
course_id INT PRIMARY KEY,
|
|
||||||
title TEXT,
|
|
||||||
category TEXT
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Таблица lesson из GP
|
|
||||||
CREATE TABLE dm_lesson (
|
|
||||||
lesson_id INT PRIMARY KEY,
|
|
||||||
title TEXT,
|
|
||||||
duration_min INT,
|
|
||||||
course_id INT
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Таблица date из GP
|
|
||||||
CREATE TABLE dm_date (
|
|
||||||
date DATE PRIMARY KEY,
|
|
||||||
year INT,
|
|
||||||
month INT,
|
|
||||||
day INT,
|
|
||||||
weekday TEXT
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Таблица fact_lesson_views из GP
|
|
||||||
|
|
||||||
CREATE TABLE dm_fact_lesson_views (
|
|
||||||
user_id INT PRIMARY KEY,
|
|
||||||
lesson_id INT,
|
|
||||||
course_id INT,
|
|
||||||
viewed_at TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Таблица enrollments из GP
|
|
||||||
|
|
||||||
CREATE TABLE dm_enrollments (
|
|
||||||
user_id INT PRIMARY KEY,
|
|
||||||
course_id INT,
|
|
||||||
enrolled_at TIMESTAMP
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Загружаем данные вручную из csv-файлов, которые заранее были экспортированы из GP
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
Reference in New Issue
Block a user