From c130319ac7b3a019b7baf2840e8f4c9f314a9588 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Fri, 31 Jul 2026 19:15:03 +0300 Subject: [PATCH] =?UTF-8?q?docs(airflow):=20=D1=88=D0=B0=D0=BF=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=20ClickHouse=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8A=D1=8F=D1=81=D0=BD=D1=8F=D0=B5=D1=82,=20=D1=87=D1=82?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=8F=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Зачем: пробники — единственный пример DAG в стенде, по ним будут учиться. Читатель начинал с кода, не зная, что тест утверждает и чем он отличается от боевого кода, — и рисковал скопировать приёмы проверки связности в ETL. Что: строка описания test_clickhouse развёрнута в список проверяемых утверждений и оговорку, что образцом ETL этот тест не является. Описание уходит в doc_md и видно в интерфейсе Airflow. Правило комментариев из #20 строк описания DAG не касается, границы тикета не задеты. Проверка: make config-test — 4/3/6, ошибок 0. make smoke — 24 проверки зелены, включая оба пробника; красной осталась только память стенда (3250 MiB против порога 3242,5), причина известна и разбирается в #21. --- dags/test_clickhouse.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/dags/test_clickhouse.py b/dags/test_clickhouse.py index 7a0c630..17d9808 100644 --- a/dags/test_clickhouse.py +++ b/dags/test_clickhouse.py @@ -1,4 +1,18 @@ -"""Сквозная проверка подключения Airflow к кластеру ClickHouse.""" +"""Сквозная проверка связности Airflow с кластером ClickHouse. + +Тест проверяет: + +- до запуска служебных таблиц нет ни на одной ноде; +- после создания на обеих лежит ожидаемая пара движков; +- маркер запуска вставлен в локальную таблицу ноды 1 и найден там ровно одной + строкой; +- нода 2 читает этот маркер через Distributed и видит его на первом шарде; +- после уборки таблиц не осталось ни на одной ноде. + +Этот тест — не образец ETL. Он ходит ON CLUSTER на каждом шаге, заводит и +сносит собственные служебные таблицы за один запуск и читает ноду 2 запросом +remote(): это приёмы проверки связности, а не загрузки данных. +""" from __future__ import annotations