diff --git a/itikhomirov/clickhouse/.DS_Store b/itikhomirov/clickhouse/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/itikhomirov/clickhouse/.DS_Store differ diff --git a/itikhomirov/clickhouse/Pet_project.sql b/itikhomirov/clickhouse/Pet_project.sql new file mode 100644 index 0000000..ff94706 --- /dev/null +++ b/itikhomirov/clickhouse/Pet_project.sql @@ -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; + diff --git a/itikhomirov/clickhouse/Pet_project_Step 1.png b/itikhomirov/clickhouse/Pet_project_Step 1.png index c5505f0..9a9bea5 100644 Binary files a/itikhomirov/clickhouse/Pet_project_Step 1.png and b/itikhomirov/clickhouse/Pet_project_Step 1.png differ diff --git a/itikhomirov/clickhouse/Pet_project_Step 1.sql b/itikhomirov/clickhouse/Pet_project_Step 1.sql deleted file mode 100644 index 4ba9c9d..0000000 --- a/itikhomirov/clickhouse/Pet_project_Step 1.sql +++ /dev/null @@ -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 \ No newline at end of file diff --git a/itikhomirov/clickhouse/Pet_project_Step 2.2.png b/itikhomirov/clickhouse/Pet_project_Step 2.2.png new file mode 100644 index 0000000..7061540 Binary files /dev/null and b/itikhomirov/clickhouse/Pet_project_Step 2.2.png differ