- Зачем: - преобразования хранилища должны читаться рядом с целевым слоем, а 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.
26 lines
1003 B
SQL
26 lines
1003 B
SQL
-- Брак: тот же срез и буквальное отрицание того же предиката.
|
|
--
|
|
-- Классы перекрываются, поэтому проверяются по порядку, а в error_class идёт
|
|
-- первый совпавший: скаляр проваливает и проверку на объект, и сверку ключей —
|
|
-- без объявленного порядка он попал бы то в один класс, то в другой.
|
|
|
|
INSERT INTO ods.order_snapshot_errors_dist
|
|
{% include "ods/_order_wire_contract.sql" %}
|
|
SELECT
|
|
raw,
|
|
multiIf(
|
|
NOT is_object, 'not_an_object',
|
|
NOT keys_match, 'keyset_mismatch',
|
|
'field_invalid'
|
|
) AS error_class,
|
|
kafka_topic,
|
|
kafka_partition,
|
|
kafka_offset,
|
|
kafka_timestamp,
|
|
consumer_host,
|
|
_load_id,
|
|
_load_ts
|
|
FROM stg.orders_raw_dist
|
|
WHERE _load_id = {load_id:String} AND NOT row_is_valid
|
|
SETTINGS distributed_foreground_insert = 1
|