- Зачем: - преобразования хранилища должны читаться рядом с целевым слоем, а 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.
28 lines
1.5 KiB
SQL
28 lines
1.5 KiB
SQL
-- Забор порции слепка заказов из Kafka в сырьё STG.
|
|
--
|
|
-- Забор — один прямой SELECT, без цикла до пустоты: одна порция ClickHouse
|
|
-- берёт десятки тысяч сообщений, а слепок дня — порядка полутора тысяч строк.
|
|
-- Короткая порция оставит хвост до следующего прогона, а отказ после чтения
|
|
-- унесёт прочитанное с собой: офсеты коммитятся в момент чтения. Граница
|
|
-- целиком — ADR 0008, «Следствия».
|
|
--
|
|
-- stream_like_engine_allow_direct_select разрешает читать чтеца запросом; вторая
|
|
-- половина пары объявлена на самой таблице (sql/ddl/10-stg-tables.sql).
|
|
-- distributed_foreground_insert = 1 — конвенция ETL-вставок стенда: задача не
|
|
-- должна зеленеть раньше, чем строки легли на шарды.
|
|
|
|
INSERT INTO stg.orders_raw_dist
|
|
SELECT
|
|
raw,
|
|
_topic AS kafka_topic,
|
|
_partition AS kafka_partition,
|
|
_offset AS kafka_offset,
|
|
_timestamp_ms AS kafka_timestamp,
|
|
hostName() AS consumer_host,
|
|
{load_id:String} AS _load_id,
|
|
now64(3) AS _load_ts
|
|
FROM stg.orders_raw_kafka
|
|
SETTINGS
|
|
stream_like_engine_allow_direct_select = 1,
|
|
distributed_foreground_insert = 1
|