From a347988af2d40f151684ba502d9e783dd2f3c56d Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 21 Dec 2025 20:23:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BF=D0=BB=D0=B0=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dwh-modeling/TODO.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dwh-modeling/TODO.md diff --git a/dwh-modeling/TODO.md b/dwh-modeling/TODO.md new file mode 100644 index 0000000..e7e163b --- /dev/null +++ b/dwh-modeling/TODO.md @@ -0,0 +1,28 @@ +# TODO: dwh-modeling + +## SCD2 (dim_customer / dim_customer_status) + +- Добавить в `02_dml_stg-dds.sql` (блок SCD2 backfill) и `03_demo_increment.sql` (incremental) явные допущения: + - гранулярность `DATE` (daily-grain), интервалы `[valid_from, valid_to)`, current = `valid_to IS NULL`; + - предполагаем **не более одного изменения в день** на BK (иначе нужен `TIMESTAMP`/sequence); + - `valid_from` берём как **effective date**: `COALESCE(event_ts, _load_ts)::date` (и почему так); + - late-arriving/backdated события в демо **не обрабатываются** (что будет “в проде”). +- Коротко документировать “effective time vs load time”: + - `event_ts` = когда изменение произошло в источнике; + - `_load_ts` = когда событие попало в DWH; + - `valid_from/valid_to` строим по effective time, а `_load_id/_load_ts` используем для трассировки/аудита. +- (Опционально) Добавить микросекцию “как читать CTE” в SCD2-блоках: что делает `src → ordered → changes → framed`. + +## Вариант с TIMESTAMP (advanced, под вопросом) + +- Подумать над отдельным примером SCD2 с `valid_from_ts/valid_to_ts TIMESTAMP`: + - кейс “несколько изменений в один день”; + - корректная обработка одинаковых `event_ts` (tie-breaker: `_load_ts`/`_load_id`); + - влияние на join фактов (условие по `[from,to)`). +- Зафиксировать: показываем как “опционально/advanced”, чтобы не пугать на базовом треке. + +## Greenplum (после Postgres-трека) + +- Отдельно проговорить практику для больших объёмов: + - обновления SCD2 в GP могут быть дорогими; обсудить паттерны (partitioning/append-only/минимизация UPDATE); + - какие поля выбирать для распределения и сортировки таблиц измерений/фактов (на уровне рекомендаций).