refactor(ods): упрощены имена таблиц заказов
- Зачем: - ODS должен показывать сущность заказа, а не способ её доставки слепком. - Что: - физические таблицы и представление переведены на имена `order_*`. - SQL загрузки, DAG и документация приведены к тому же словарю. - Проверка: - `make config-test`, `make lint`. - `make clean && make up`, `make smoke`, `make check-clickhouse`, `make check-services`.
This commit is contained in:
1 parent
a24dfc4510
commit
2a94ee9bde
13 files changed
+48
-49
No files matched your search
@@ -60,7 +60,7 @@ CSV-файла. Живёт он вне цепочки слоёв, в зоне `d
|
||||
приходит от транспорта: слой хранит то, что доехало по топику, и зовётся именем
|
||||
топика — `hits_raw` от `hits`, `orders_raw` от `orders`. В типизированных слоях
|
||||
имя приходит от предметной области и стоит в единственном числе: `event`,
|
||||
`order_snapshot`, `session`. Граница между «как привезли» и «что это такое»
|
||||
`order`, `session`. Граница между «как привезли» и «что это такое»
|
||||
проходит по STG, и имена её показывают.
|
||||
|
||||
## Раскладка по шардам
|
||||
@@ -91,7 +91,7 @@ CSV-файла. Живёт он вне цепочки слоёв, в зоне `d
|
||||
по `cityHash64(order_id)`; ключи остальных частей будущей модели и витрин
|
||||
появятся вместе с ними.
|
||||
|
||||
Замена партиций не используется для `ods.order_snapshot`: версии прошлых дней
|
||||
Замена партиций не используется для `ods.order`: версии прошлых дней
|
||||
доливаются, а прямое чтение Kafka не задаёт границы полного слепка ([ADR
|
||||
0010](../adr/0010-order-versions-in-ods.md)). Если партиционная пересборка
|
||||
понадобится будущим объектам DDS или DM, партиция-донор должна быть заранее
|
||||
@@ -141,7 +141,7 @@ kafka_offset)`: разбор полётов идёт от «какое сооб
|
||||
заказов — пакетным шагом. Дальше метка переносится в ODS как есть и отвечает на
|
||||
вопрос «когда строка приехала в хранилище», а не «когда её разобрали». В
|
||||
`ods.event` она же служит колонкой версии `ReplacingMergeTree` и схлопывает
|
||||
повтор доставки. У `ods.order_snapshot` версию задаёт `updated_at` источника;
|
||||
повтор доставки. У `ods.order` версию задаёт `updated_at` источника;
|
||||
`_load_ts` только показывает, когда конкретная строка приехала.
|
||||
|
||||
`created_at` и `updated_at` заказа к служебным колонкам хранилища не относятся.
|
||||
@@ -181,9 +181,9 @@ snake_case-имена и расшифровку кодов.
|
||||
|
||||
## Версии заказов
|
||||
|
||||
`ods.order_snapshot_rep` хранит принятые версии в
|
||||
`ods.order_rep` хранит принятые версии в
|
||||
`ReplacingMergeTree(updated_at)`: ключ сортировки — `order_id`, партиция —
|
||||
`toDate(created_at)`. `ods.order_snapshot_dist` шардирует по
|
||||
`toDate(created_at)`. `ods.order_dist` шардирует по
|
||||
`cityHash64(order_id)`. Все версии заказа лежат в одной партиции, чтобы их могли
|
||||
схлопывать фоновые слияния, и на одном шарде, чтобы распределённый `FINAL`
|
||||
выбрал одного победителя.
|
||||
@@ -414,7 +414,7 @@ D0 и к реальному календарю не привязана; паке
|
||||
kafka_offset)`: смотрят такую таблицу от класса, а внутри класса — по координатам
|
||||
доставки.
|
||||
|
||||
`ods.order_snapshot_errors` держит тот же диагностический минимум и `_load_id`
|
||||
`ods.order_errors` держит тот же диагностический минимум и `_load_id`
|
||||
запуска. У заказов три класса по приоритету: `not_an_object`,
|
||||
`keyset_mismatch`, `field_invalid`. Сырой текст остаётся рядом, поэтому класс не
|
||||
разрастается до имени отдельного поля. Точная граница приёма — в
|
||||
@@ -534,15 +534,15 @@ Airflow читает и собирает эти файлы штатным шаб
|
||||
| `ods` | `ods.event_v` | актуальная версия события с полями источника |
|
||||
| `ods` | `ods.event_errors_rep` / `_dist` | строки, не прошедшие строгий приём |
|
||||
| `ods` | `ods.event_mv`, `ods.event_errors_mv` | разбор сырья в событие и в ошибки |
|
||||
| `ods` | `ods.order_snapshot_rep` / `_dist` | типизированные версии заказа |
|
||||
| `ods` | `ods.order_rep` / `_dist` | типизированные версии заказа |
|
||||
| `ods` | `ods.order_v` | текущая версия заказа на языке источника |
|
||||
| `ods` | `ods.order_snapshot_errors_rep` / `_dist` | строки слепка, не прошедшие строгий приём |
|
||||
| `ods` | `ods.order_errors_rep` / `_dist` | строки слепка, не прошедшие строгий приём |
|
||||
| `dic` | `dic.products_file` | чтец CSV-каталога, общего с генератором |
|
||||
| `dic` | `dic.products` | словарь товаров поверх подложки |
|
||||
|
||||
Матвью разбора у заказов нет: срез сырья раскладывают по этим двум целям два
|
||||
`INSERT SELECT` шага `parse_batch` из файлов `sql/ods/order_snapshot_load.sql`
|
||||
и `sql/ods/order_snapshot_errors_load.sql`.
|
||||
`INSERT SELECT` шага `parse_batch` из файлов `sql/ods/order_load.sql` и
|
||||
`sql/ods/order_errors_load.sql`.
|
||||
|
||||
Слой DDS и слой DM появляются на следующих этапах; их состав задан разделом
|
||||
7 мастер-спеки и переносится сюда по мере постройки.
|
||||
@@ -606,14 +606,13 @@ DDL-словарь с файловым источником внутри `user_f
|
||||
`_load_id`, пересечение ветвей — ноль. Все восемь строк брака — версии одного
|
||||
заказа с отрицательным `total`; это дефект генератора, разобранный в
|
||||
[спецификации приёма](orders/ingestion.md), «Что проверено». На управляемой
|
||||
порции из пяти строк (две версии
|
||||
одного заказа плюс по одной строке каждого класса брака) годные ушли в
|
||||
`ods.order_snapshot`, брак — в `ods.order_snapshot_errors` с ожидаемыми
|
||||
классами. Обе версии легли в одну партицию и на один шард; `FINAL` через
|
||||
распределённую таблицу вернул одну строку — ту, у которой `updated_at` позже, —
|
||||
тогда как физический счёт показывал две. Повтор задачи с тем же `_load_id`
|
||||
строку в `ods.order_v` и её `_load_ts` не изменил, а таблица ошибок записала
|
||||
тот же брак второй раз, как и обещано спецификацией приёма.
|
||||
порции из пяти строк (две версии одного заказа плюс по одной строке каждого
|
||||
класса брака) годные ушли в `ods.order`, брак — в `ods.order_errors` с
|
||||
ожидаемыми классами. Обе версии легли в одну партицию и на один шард; `FINAL`
|
||||
через распределённую таблицу вернул одну строку — ту, у которой `updated_at`
|
||||
позже, — тогда как физический счёт показывал две. Повтор задачи с тем же
|
||||
`_load_id` строку в `ods.order_v` и её `_load_ts` не изменил, а таблица ошибок
|
||||
записала тот же брак второй раз, как и обещано спецификацией приёма.
|
||||
|
||||
Отдельно измерено, что **сводка вставки не годится в счётчики строк**: у
|
||||
запроса с `WHERE` `read_rows` считает прочитанное с диска, а не подошедшее, —
|
||||
|
||||
Reference in new issue
Block a user