94 lines
2.3 KiB
SQL
94 lines
2.3 KiB
SQL
-- Измерение пользователей
|
|
CREATE TABLE core.dim_user (
|
|
user_id INT PRIMARY KEY,
|
|
name TEXT,
|
|
age INT,
|
|
email TEXT,
|
|
registration_date DATE
|
|
)
|
|
distributed by (user_id);
|
|
|
|
-- Измерение курсов
|
|
CREATE TABLE core.dim_course (
|
|
course_id INT PRIMARY KEY,
|
|
title TEXT,
|
|
category TEXT
|
|
)
|
|
distributed by (course_id);
|
|
|
|
-- Измерение уроков
|
|
CREATE TABLE core.dim_lesson (
|
|
lesson_id INT PRIMARY KEY,
|
|
title TEXT,
|
|
duration_min INT,
|
|
course_id INT REFERENCES core.dim_course(course_id)
|
|
)
|
|
distributed by (lesson_id);
|
|
|
|
-- Опционально: измерение времени
|
|
CREATE TABLE core.dim_date (
|
|
date DATE PRIMARY KEY,
|
|
year INT,
|
|
month INT,
|
|
day INT,
|
|
weekday TEXT
|
|
)
|
|
distributed replicated;
|
|
|
|
-- Таблицы фактов:
|
|
CREATE TABLE core.fact_lesson_views (
|
|
user_id INT REFERENCES core.dim_user(user_id),
|
|
lesson_id INT REFERENCES core.dim_lesson(lesson_id),
|
|
course_id INT REFERENCES core.dim_course(course_id),
|
|
viewed_at TIMESTAMP
|
|
)
|
|
distributed by (course_id);
|
|
|
|
CREATE TABLE core.enrollments (
|
|
user_id INT REFERENCES core.dim_user(user_id),
|
|
course_id INT REFERENCES core.dim_course(course_id),
|
|
enrolled_at TIMESTAMP
|
|
)
|
|
distributed by (course_id);
|
|
|
|
--ETL переброс данных из raw в core
|
|
INSERT INTO core.dim_user (user_id, name, age, email, registration_date)
|
|
SELECT DISTINCT
|
|
id::INT,
|
|
name::TEXT,
|
|
age::INT,
|
|
email::TEXT,
|
|
registration_date::DATE
|
|
FROM raw.users;
|
|
|
|
INSERT INTO core.dim_course (course_id, title, category)
|
|
SELECT DISTINCT
|
|
id::INT,
|
|
title::TEXT,
|
|
category::TEXT
|
|
FROM raw.courses;
|
|
|
|
INSERT INTO core.dim_lesson (lesson_id, title, duration_min, course_id)
|
|
SELECT DISTINCT
|
|
id::INT,
|
|
title::TEXT,
|
|
duration_min::INT,
|
|
course_id::INT
|
|
FROM raw.lessons;
|
|
|
|
-- Заполнение таблицы фактов
|
|
insert into core.fact_lesson_views (user_id, lesson_id, course_id, viewed_at)
|
|
select
|
|
lw.user_id,
|
|
lw.lesson_id,
|
|
l.course_id,
|
|
lw.viewed_at
|
|
from raw.lessons_views lw
|
|
join raw.lessons l on lw.lesson_id = l.id;
|
|
|
|
insert into core.enrollments (user_id, course_id, enrolled_at)
|
|
select
|
|
user_id,
|
|
course_id,
|
|
enrolled_at
|
|
from raw.enrollments; |