-- Измерение пользователей 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;