fix(modeling): исправлены ошибки по результатам перекрёстного ревью

- Зачем:
  - в статье и скриптах обнаружены фактические ошибки и несостыковки
- Что:
  - README: f.order_date -> d.date_actual в примере витрины (колонки order_date нет в fact_sales)
  - README: «календарь на 10 лет» -> «5 лет» (соответствует генерации 2023-2027 в скрипте)
  - 09_solution: bounds CTE теперь использует CURRENT_DATE для открытых интервалов (valid_to IS NULL)
  - 09_solution: комментарий про дубли в STG при повторном запуске блока 3
  - 05_ddl_dm: выравнивание total_line_items
  - AGENTS.md: обновлён диапазон скриптов 01-09
- Проверка:
  - визуальная проверка diff

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-21 15:13:38 +03:00
co-authored by Claude Opus 4.6
parent 14a61a3b46
commit c6a20f3cf7
4 changed files with 12 additions and 6 deletions
@@ -147,6 +147,10 @@ SELECT * FROM dds.dim_customer_status ORDER BY customer_bk, valid_from;
-- - клиент 104: новый клиент, статус new
-- 3.0) Новые события в STG
-- При повторном запуске эти строки добавятся в STG ещё раз (дубли).
-- Для демо это не страшно: ODS-вставка ниже использует ON CONFLICT DO NOTHING,
-- а SCD2-блок защищён от повторных вставок через NOT EXISTS.
-- В продакшене STG обычно очищается перед каждой загрузкой (TRUNCATE / партиция по дате).
INSERT INTO stg.customer_status_raw (customer_id, status, event_ts, _load_id, _load_ts) VALUES
('101','active','2024-11-15 09:00:00','batch_20241115_1000','2024-11-15 10:00:00'),
('102','active','2024-05-05 09:30:00','batch_20240505_1000','2024-05-05 10:00:00'),
@@ -305,7 +309,9 @@ TRUNCATE dm.mart_customer_status_daily;
WITH bounds AS (
SELECT
min(valid_from) AS date_from,
max(coalesce(valid_to, valid_from)) AS date_to
-- CURRENT_DATE для открытых интервалов (valid_to IS NULL = текущий статус),
-- иначе витрина не покроет даты после последней смены статуса.
max(coalesce(valid_to, CURRENT_DATE)) AS date_to
FROM dds.dim_customer_status
)
INSERT INTO dm.mart_customer_status_daily (