Создана база dm, физические таблицы и публичные представления revenue_daily и daily_traffic.
Добавлен ручной DAG dm_transform: выручка заменяет партиции изменяемого окна, трафик пишет новую версию полной истории.
Область пересборки выручки выводится из последнего слепка ODS и дополняется пропущенной историей DDS.
Обновлены dm.md, карта DDL, мастер-спека и список читателей события.
Решение по соединению
EXPLAIN PLAN и system.query_log подтвердили, что публичные _v скрывают ко-локацию от distributed_product_mode = 'local': оба шарда отдают строки инициатору. По решению владельца используется явный GLOBAL LEFT JOIN через публичные договоры; физические таблицы не подставляются. Отрицательный результат опыта записан в документации.
Проверка
make lint
make config-test
make smoke — 21/21
make check-clickhouse — 10/10
make check-services — 7/7
Чистая сборка: make rebuild-storage, затем dds_transform и dm_transform.
Повторный dm_transform: в публичных _v нет дублей; физическая история трафика сохраняет обе версии.
Роль bi читает оба _v, не пишет в DM и не читает STG.
При первом стендовом прогоне три одновременные задачи замены партиций привели к подтвержденному OOM рабочего процесса. Замены сериализованы через max_active_tis_per_dag=1; после перезапуска scheduler все итоговые проверки прошли без OOM и самоперезапусков.
Независимое ревью кода выполнил Opus, линию уместности и литературного русского — Fable. Подтвержденные находки исправлены и повторно проверены.
## Что
- Создана база `dm`, физические таблицы и публичные представления `revenue_daily` и `daily_traffic`.
- Добавлен ручной DAG `dm_transform`: выручка заменяет партиции изменяемого окна, трафик пишет новую версию полной истории.
- Область пересборки выручки выводится из последнего слепка ODS и дополняется пропущенной историей DDS.
- Обновлены `dm.md`, карта DDL, мастер-спека и список читателей события.
## Решение по соединению
`EXPLAIN PLAN` и `system.query_log` подтвердили, что публичные `_v` скрывают ко-локацию от `distributed_product_mode = 'local'`: оба шарда отдают строки инициатору. По решению владельца используется явный `GLOBAL LEFT JOIN` через публичные договоры; физические таблицы не подставляются. Отрицательный результат опыта записан в документации.
## Проверка
- `make lint`
- `make config-test`
- `make smoke` — 21/21
- `make check-clickhouse` — 10/10
- `make check-services` — 7/7
- Чистая сборка: `make rebuild-storage`, затем `dds_transform` и `dm_transform`.
- Прямые сверки мер: `revenue_mismatches=0`, `traffic_mismatches=0`.
- Повторный `dm_transform`: в публичных `_v` нет дублей; физическая история трафика сохраняет обе версии.
- Роль `bi` читает оба `_v`, не пишет в DM и не читает STG.
При первом стендовом прогоне три одновременные задачи замены партиций привели к подтвержденному OOM рабочего процесса. Замены сериализованы через `max_active_tis_per_dag=1`; после перезапуска scheduler все итоговые проверки прошли без OOM и самоперезапусков.
Независимое ревью кода выполнил Opus, линию уместности и литературного русского — Fable. Подтвержденные находки исправлены и повторно проверены.
Closes #154
ddmitry
self-assigned this 2026-08-26 20:56:18 +03:00
Зачем:
- Показать два ритма пересборки агрегатов на готовых витринах DM.
Что:
- Добавлены физические модели и публичные договоры revenue_daily и daily_traffic.
- Добавлен dm_transform с оконной заменой выручки и полным пересчетом трафика.
- Отрицательный опыт локального соединения через публичные _v зафиксирован; выбран явный GLOBAL LEFT JOIN.
- Замены партиций сериализованы после подтвержденного OOM при трех одновременных задачах.
- Обновлены архитектурные документы и мастер-спека.
Проверка:
- make lint, make config-test, make smoke, make check-clickhouse, make check-services.
- Чистая сборка world_recreate, dds_transform и dm_transform; меры сверены с прямыми агрегатами.
- Зачем:
- Ревью выявило неясные причины ограничений и защитных условий в учебном образце.
- Что:
- Спекулятивный общий потолок задач заменен адресным лимитом размноженной замены с точным описанием OOM.
- Объяснены нулевое значение непарного LEFT JOIN и опасность пустого DDS при замене партиций.
- Добавлена ссылка на разбор области пересборки, а общий штамп про Context7 удален.
- Проверка:
- make lint, make config-test, make smoke; успешный запуск dm_transform.
ddmitry
merged commit fb00bbe4c3 into main2026-08-26 22:23:40 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что
dm, физические таблицы и публичные представленияrevenue_dailyиdaily_traffic.dm_transform: выручка заменяет партиции изменяемого окна, трафик пишет новую версию полной истории.dm.md, карта DDL, мастер-спека и список читателей события.Решение по соединению
EXPLAIN PLANиsystem.query_logподтвердили, что публичные_vскрывают ко-локацию отdistributed_product_mode = 'local': оба шарда отдают строки инициатору. По решению владельца используется явныйGLOBAL LEFT JOINчерез публичные договоры; физические таблицы не подставляются. Отрицательный результат опыта записан в документации.Проверка
make lintmake config-testmake smoke— 21/21make check-clickhouse— 10/10make check-services— 7/7make rebuild-storage, затемdds_transformиdm_transform.revenue_mismatches=0,traffic_mismatches=0.dm_transform: в публичных_vнет дублей; физическая история трафика сохраняет обе версии.biчитает оба_v, не пишет в DM и не читает STG.При первом стендовом прогоне три одновременные задачи замены партиций привели к подтвержденному OOM рабочего процесса. Замены сериализованы через
max_active_tis_per_dag=1; после перезапуска scheduler все итоговые проверки прошли без OOM и самоперезапусков.Независимое ревью кода выполнил Opus, линию уместности и литературного русского — Fable. Подтвержденные находки исправлены и повторно проверены.
Closes #154