РАБОТА НАД ОШИБКАМИ. Пет проект: DWH. Этап 4: Подготовка витрин в Greenplum.
This commit is contained in:
@@ -157,6 +157,7 @@ SELECT
|
|||||||
FROM
|
FROM
|
||||||
generate_series('2023-01-01'::date, '2030-12-31'::date, INTERVAL '1 day') AS d;
|
generate_series('2023-01-01'::date, '2030-12-31'::date, INTERVAL '1 day') AS d;
|
||||||
|
|
||||||
|
-- fact_lesson_views
|
||||||
INSERT INTO core.fact_lesson_views (user_id, lesson_id, course_id, viewed_at)
|
INSERT INTO core.fact_lesson_views (user_id, lesson_id, course_id, viewed_at)
|
||||||
SELECT
|
SELECT
|
||||||
raw_lv.user_id,
|
raw_lv.user_id,
|
||||||
@@ -172,6 +173,7 @@ WHERE
|
|||||||
AND raw_lv.user_id IS NOT NULL AND raw_lv.lesson_id IS NOT NULL
|
AND raw_lv.user_id IS NOT NULL AND raw_lv.lesson_id IS NOT NULL
|
||||||
AND raw_l.course_id IS NOT NULL AND raw_lv.viewed_at IS NOT NULL;
|
AND raw_l.course_id IS NOT NULL AND raw_lv.viewed_at IS NOT NULL;
|
||||||
|
|
||||||
|
-- enrollments
|
||||||
INSERT INTO core.enrollments (user_id, course_id, enrolled_at)
|
INSERT INTO core.enrollments (user_id, course_id, enrolled_at)
|
||||||
SELECT
|
SELECT
|
||||||
raw_e.user_id,
|
raw_e.user_id,
|
||||||
|
|||||||
@@ -38,13 +38,22 @@ SELECT
|
|||||||
du.name AS user_name,
|
du.name AS user_name,
|
||||||
du.email,
|
du.email,
|
||||||
du.age,
|
du.age,
|
||||||
0 AS enrollments_count,
|
e.enrollments_count,
|
||||||
du.registration_date
|
du.registration_date
|
||||||
FROM
|
FROM
|
||||||
core.dim_user du
|
core.dim_user du
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
count(course_id) AS enrollments_count
|
||||||
|
FROM
|
||||||
|
core.enrollments
|
||||||
|
GROUP BY
|
||||||
|
user_id
|
||||||
|
) e ON du.user_id = e.user_id
|
||||||
WHERE
|
WHERE
|
||||||
NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id);
|
NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id);
|
||||||
-- тут странно, в условии сказано зачем-то enrollment присоединять, но делается все и без него отлично
|
-- интересно, что при проверки плана запроса, когда кусок с enrollments_count был в CTE, выдавал какую-то хуйню, а когда я засунул его в подзапрос, сразу инлексы заработали, и строки начали эффективней читаться
|
||||||
|
|
||||||
|
|
||||||
-- 9
|
-- 9
|
||||||
@@ -60,7 +69,7 @@ WITH results_dim_course_lesson AS (
|
|||||||
JOIN
|
JOIN
|
||||||
core.dim_lesson dl ON dc.course_id = dl.course_id
|
core.dim_lesson dl ON dc.course_id = dl.course_id
|
||||||
GROUP BY
|
GROUP BY
|
||||||
dc.course_id
|
dc.course_id, dc.title
|
||||||
),
|
),
|
||||||
results_fact_lesson_views AS (
|
results_fact_lesson_views AS (
|
||||||
SELECT
|
SELECT
|
||||||
@@ -79,7 +88,7 @@ SELECT
|
|||||||
rdcl.title AS course_title,
|
rdcl.title AS course_title,
|
||||||
rdcl.lessons_in_course,
|
rdcl.lessons_in_course,
|
||||||
COALESCE(rflv.lessons_viewed, 0) AS lessons_viewed,
|
COALESCE(rflv.lessons_viewed, 0) AS lessons_viewed,
|
||||||
round(COALESCE(rflv.lessons_viewed, 0) / NULLIF(rdcl.lessons_in_course, 0)::numeric, 2) AS completion_rate
|
round(COALESCE(rflv.lessons_viewed, 0)::numeric / NULLIF(rdcl.lessons_in_course, 0), 2) AS completion_rate
|
||||||
FROM
|
FROM
|
||||||
core.dim_user du
|
core.dim_user du
|
||||||
JOIN
|
JOIN
|
||||||
|
|||||||
Reference in New Issue
Block a user