refactor(orders): SQL приёма вынесен из DAG
- Зачем: - преобразования хранилища должны читаться рядом с целевым слоем, а 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.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
-- Годные версии заказа. Срез читается по _load_id — тому же, что проставил
|
||||
-- забор: разбор идёт по неизменной порции, а не по «всему, что появилось».
|
||||
--
|
||||
-- Разобранные значения берёт assumeNotNull: обнуляемый разбор стоит за
|
||||
-- предикатом, который NULL уже отсёк, и приведение здесь не может упасть.
|
||||
|
||||
INSERT INTO ods.order_snapshot_dist
|
||||
{% include "ods/_order_wire_contract.sql" %}
|
||||
SELECT
|
||||
JSONExtractString(raw, 'order_id') AS order_id,
|
||||
JSONExtract(raw, 'user_id', 'UInt64') AS user_id,
|
||||
JSONExtractString(raw, 'status') AS status,
|
||||
assumeNotNull(parseDateTime64InJodaSyntaxOrNull(
|
||||
JSONExtractString(raw, 'created_at'), ts_mask, 'UTC')) AS created_at,
|
||||
assumeNotNull(parseDateTime64InJodaSyntaxOrNull(
|
||||
JSONExtractString(raw, 'updated_at'), ts_mask, 'UTC')) AS updated_at,
|
||||
assumeNotNull(toDecimal64OrNull(
|
||||
JSONExtractString(raw, 'items_total'), 2)) AS items_total,
|
||||
assumeNotNull(toDecimal64OrNull(JSONExtractString(raw, 'discount'), 2)) AS discount,
|
||||
assumeNotNull(toDecimal64OrNull(JSONExtractString(raw, 'delivery'), 2)) AS delivery,
|
||||
assumeNotNull(toDecimal64OrNull(JSONExtractString(raw, 'total'), 2)) AS total,
|
||||
-- items кладётся сырым фрагментом JSON, а не разобранной структурой.
|
||||
JSONExtractRaw(raw, 'items') AS items,
|
||||
toDate(assumeNotNull(parseDateTimeInJodaSyntaxOrNull(
|
||||
JSONExtractString(raw, 'snapshot_date'),
|
||||
'yyyy-MM-dd', 'UTC'))) AS snapshot_date,
|
||||
-- Метки запуска и прибытия переносятся как есть. Поставь здесь now64(3) —
|
||||
-- и _load_ts молча ответила бы на другой вопрос: «когда разобрали».
|
||||
_load_id,
|
||||
_load_ts
|
||||
FROM stg.orders_raw_dist
|
||||
WHERE _load_id = {load_id:String} AND row_is_valid
|
||||
SETTINGS distributed_foreground_insert = 1
|
||||
Reference in New Issue
Block a user