2.4 KiB
2.4 KiB
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);
- какие поля выбирать для распределения и сортировки таблиц измерений/фактов (на уровне рекомендаций).