Менти должен различать бизнес-версию заказа (updated_at), наблюдение источника (snapshot_date) и запуск загрузки (_load_id), а текущее состояние читать через одну явную поверхность ODS.
Что
Добавлены ods.order_snapshot_rep / _dist на ReplacingMergeTree(updated_at) и таблицы брака по конвенциям хранилища.
Добавлено представление ods.order_v над распределённой таблицей с FINAL.
Даг orders_ingest дополнен одним следующим task_id: два последовательных INSERT SELECT раскладывают неизменный срез STG на годные строки и брак.
Исполняемый SQL вынесен из DAG и разложен по целевым слоям в sql/stg/ и sql/ods/; обе ветви ODS включают один общий контракт провода.
Строгая граница проверяет точный набор 11 ключей, типы JSON, неотрицательные деньги с двумя знаками, времена UTC с миллисекундами, дату и массив items; внутреннее содержимое items и бизнес-инварианты не проверяются.
Результаты живых опытов и правило раскладки SQL записаны в документации.
Проверка
make lint и make config-test — зелёные.
make smoke — 20/20.
make check-clickhouse — 9/9.
make check-services — 7/7.
airflow tasks render загрузил три внешних SQL-файла и включил общий контракт в обе ветви ODS.
Изолированный airflow tasks test orders_ingest parse_batch выполнил оба запроса против ClickHouse на пустом искусственном _load_id.
Предикат полностью и без пересечения разложил 13 661 настоящую строку: 13 653 годных и 8 field_invalid.
Управляемая порция подтвердила три класса брака, выбор поздней версии через ods.order_v, повтор того же _load_id и сохранение _load_ts.
Опытные данные и временные объекты удалены.
Найдено вне границ
Восемь настоящих строк одного заказа содержат отрицательный total. Приём законно относит их к field_invalid; ослаблять границу ODS не стали. Причина зафиксирована в #102, который должен быть исправлен до сборки чистого стартового мира в #96.
## Зачем
Менти должен различать бизнес-версию заказа (`updated_at`), наблюдение источника (`snapshot_date`) и запуск загрузки (`_load_id`), а текущее состояние читать через одну явную поверхность ODS.
## Что
- Добавлены `ods.order_snapshot_rep` / `_dist` на `ReplacingMergeTree(updated_at)` и таблицы брака по конвенциям хранилища.
- Добавлено представление `ods.order_v` над распределённой таблицей с `FINAL`.
- Даг `orders_ingest` дополнен одним следующим `task_id`: два последовательных `INSERT SELECT` раскладывают неизменный срез STG на годные строки и брак.
- Исполняемый SQL вынесен из DAG и разложен по целевым слоям в `sql/stg/` и `sql/ods/`; обе ветви ODS включают один общий контракт провода.
- Строгая граница проверяет точный набор 11 ключей, типы JSON, неотрицательные деньги с двумя знаками, времена UTC с миллисекундами, дату и массив `items`; внутреннее содержимое `items` и бизнес-инварианты не проверяются.
- Результаты живых опытов и правило раскладки SQL записаны в документации.
## Проверка
- `make lint` и `make config-test` — зелёные.
- `make smoke` — 20/20.
- `make check-clickhouse` — 9/9.
- `make check-services` — 7/7.
- `airflow tasks render` загрузил три внешних SQL-файла и включил общий контракт в обе ветви ODS.
- Изолированный `airflow tasks test orders_ingest parse_batch` выполнил оба запроса против ClickHouse на пустом искусственном `_load_id`.
- Предикат полностью и без пересечения разложил 13 661 настоящую строку: 13 653 годных и 8 `field_invalid`.
- Управляемая порция подтвердила три класса брака, выбор поздней версии через `ods.order_v`, повтор того же `_load_id` и сохранение `_load_ts`.
- Опытные данные и временные объекты удалены.
## Найдено вне границ
Восемь настоящих строк одного заказа содержат отрицательный `total`. Приём законно относит их к `field_invalid`; ослаблять границу ODS не стали. Причина зафиксирована в #102, который должен быть исправлен до сборки чистого стартового мира в #96.
Closes #94
- Зачем:
- менти должен различать версию заказа, наблюдение источника и запуск загрузки.
- Что:
- добавлены таблицы версий и брака заказов, а также представление ods.order_v.
- даг orders_ingest дополнен строгим переходом одного среза STG в две цели ODS.
- результаты опытов записаны в документации, дефект генератора вынесен в #102.
- Проверка:
- make lint config-test smoke check-clickhouse check-services.
- Зачем:
- преобразования хранилища должны читаться рядом с целевым слоем, а DAG должен показывать оркестрацию.
- Что:
- запросы забора и разбора заказов разложены по каталогам STG и ODS.
- общий контракт провода подключён в обе ветви штатным шаблонизатором Airflow.
- SQL смонтирован во все службы Airflow, а правило раскладки записано в архитектуре.
- Проверка:
- make lint config-test smoke check-services.
- airflow tasks render для pull_batch и parse_batch; airflow tasks test для parse_batch.
ddmitry
merged commit 62b275ef94 into main2026-08-18 23:58:55 +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.
Зачем
Менти должен различать бизнес-версию заказа (
updated_at), наблюдение источника (snapshot_date) и запуск загрузки (_load_id), а текущее состояние читать через одну явную поверхность ODS.Что
ods.order_snapshot_rep/_distнаReplacingMergeTree(updated_at)и таблицы брака по конвенциям хранилища.ods.order_vнад распределённой таблицей сFINAL.orders_ingestдополнен одним следующимtask_id: два последовательныхINSERT SELECTраскладывают неизменный срез STG на годные строки и брак.sql/stg/иsql/ods/; обе ветви ODS включают один общий контракт провода.items; внутреннее содержимоеitemsи бизнес-инварианты не проверяются.Проверка
make lintиmake config-test— зелёные.make smoke— 20/20.make check-clickhouse— 9/9.make check-services— 7/7.airflow tasks renderзагрузил три внешних SQL-файла и включил общий контракт в обе ветви ODS.airflow tasks test orders_ingest parse_batchвыполнил оба запроса против ClickHouse на пустом искусственном_load_id.field_invalid.ods.order_v, повтор того же_load_idи сохранение_load_ts.Найдено вне границ
Восемь настоящих строк одного заказа содержат отрицательный
total. Приём законно относит их кfield_invalid; ослаблять границу ODS не стали. Причина зафиксирована в #102, который должен быть исправлен до сборки чистого стартового мира в #96.Closes #94