From 347334dc26e23ad8121e35e62554986021306004 Mon Sep 17 00:00:00 2001 From: mnoskov Date: Tue, 28 Apr 2026 04:30:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=90=D0=91=D0=9E=D0=A2=D0=90=20=D0=9D?= =?UTF-8?q?=D0=90=D0=94=20=D0=9E=D0=A8=D0=98=D0=91=D0=9A=D0=90=D0=9C=D0=98?= =?UTF-8?q?.=20=D0=9F=D0=B5=D1=82=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82:?= =?UTF-8?q?=20DWH.=20=D0=AD=D1=82=D0=B0=D0=BF=204:=20=D0=9F=D0=BE=D0=B4?= =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=20=D0=B2=20Greenplum.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Пет проект: DWH/Step_3_core_layer.sql | 2 ++ .../Step_4_preparing_display_cases_at_greenplum.sql | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql b/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql index e03b401..a804a5c 100644 --- a/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql +++ b/mnoskov/greenplum/Пет проект: DWH/Step_3_core_layer.sql @@ -157,6 +157,7 @@ SELECT FROM 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) SELECT 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_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) SELECT raw_e.user_id, diff --git a/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql b/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql index de2dac6..be37917 100644 --- a/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql +++ b/mnoskov/greenplum/Пет проект: DWH/Step_4_preparing_display_cases_at_greenplum.sql @@ -38,13 +38,22 @@ SELECT du.name AS user_name, du.email, du.age, - 0 AS enrollments_count, + e.enrollments_count, du.registration_date FROM 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 NOT EXISTS (SELECT 1 FROM core.fact_lesson_views flv WHERE flv.user_id = du.user_id); --- тут странно, в условии сказано зачем-то enrollment присоединять, но делается все и без него отлично +-- интересно, что при проверки плана запроса, когда кусок с enrollments_count был в CTE, выдавал какую-то хуйню, а когда я засунул его в подзапрос, сразу инлексы заработали, и строки начали эффективней читаться -- 9 @@ -60,7 +69,7 @@ WITH results_dim_course_lesson AS ( JOIN core.dim_lesson dl ON dc.course_id = dl.course_id GROUP BY - dc.course_id + dc.course_id, dc.title ), results_fact_lesson_views AS ( SELECT @@ -79,7 +88,7 @@ SELECT rdcl.title AS course_title, rdcl.lessons_in_course, 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 core.dim_user du JOIN