docs(warehouse): упрощены объяснения витрин, сессий и пересчета
Зачем: читателю ступеней 1–4 нужно проследить выбор дней, расчет строки и публикацию результата без расшифровки метафор. Что: согласованы справочники DM, сессий, ETL и два раздела хранилища с комментариями шести SQL-примеров. Уточнены ограничения повторного запуска и выбора атрибутов при равном времени событий. Проверка: make lint, git diff --check, локальные Markdown-ссылки и якоря. SQL без комментариев совпадает; AST Python без строк документации совпадает. Исторические разделы и материалы вне границ задачи сохранены. Refs: #249
This commit is contained in:
1 parent
84dc718f62
commit
5f317ba8d2
11 files changed
+440
-490
No files matched your search
@@ -1,14 +1,11 @@
|
||||
-- DM: объем пересборки выручки.
|
||||
-- DM: диапазон пересборки выручки, first_day и last_day включительно.
|
||||
-- Последний слепок ODS задает даты оформления еще изменяемых заказов.
|
||||
-- Агрегат читает DDS; ODS нужен только для границ диапазона.
|
||||
-- Левая граница расширяется до первого дня с оплаченными заказами DDS,
|
||||
-- которого нет в витрине. Так первый запуск охватывает историю выручки.
|
||||
-- По наличию даты нельзя обнаружить частично заполненный день.
|
||||
--
|
||||
-- Последний слепок ODS называет дни, состояние которых источник еще может
|
||||
-- изменить. Сам агрегат читает только DDS; ODS здесь нужен лишь для границ.
|
||||
-- Первый запуск и повтор после частичного отказа расширяют левую границу до
|
||||
-- первого дня оплаченных заказов, которого еще нет в витрине.
|
||||
-- Почему хвост начинается с первого пропуска и чем за это платит ODS,
|
||||
-- разобрано в sql/dds/order_scope.sql.
|
||||
--
|
||||
-- Файл кончается без точки с запятой: даг читает его одним запросом и ждет
|
||||
-- одну строку с границами.
|
||||
-- Точки с запятой в конце нет: драйвер добавляет FORMAT к этому запросу.
|
||||
WITH
|
||||
(SELECT max(snapshot_date) FROM ods.order_dist) AS last_snapshot,
|
||||
(
|
||||
@@ -24,8 +21,7 @@ WITH
|
||||
(
|
||||
SELECT minOrNull(report_date)
|
||||
FROM (SELECT DISTINCT order_date AS report_date FROM dds.order_v WHERE status = 'paid')
|
||||
-- Правая сторона тоже распределенная: GLOBAL собирает множество дней
|
||||
-- на инициаторе и не превращает запрос в запрещенное двойное чтение.
|
||||
-- GLOBAL собирает список дней витрины со всех шардов.
|
||||
WHERE report_date GLOBAL NOT IN (
|
||||
SELECT report_date FROM dm.revenue_daily_dist
|
||||
)
|
||||
@@ -33,7 +29,7 @@ WITH
|
||||
SELECT
|
||||
least(window_start, coalesce(first_missing_day, window_start)) AS first_day,
|
||||
window_end AS last_day
|
||||
-- Без ODS неизвестно окно. Без готового DDS донор останется пустым, а замена
|
||||
-- сотрет уже собранные дни выручки. Поэтому для прогона нужны оба источника.
|
||||
-- Для выбора диапазона нужны заказы в ODS, для расчета — в DDS.
|
||||
-- Эта проверка наличия строк не подтверждает полноту источников.
|
||||
WHERE (SELECT count() FROM dds.order_v) > 0
|
||||
AND (SELECT count() FROM ods.order_dist) > 0
|
||||
Reference in new issue
Block a user