feat(dq): добавлен контроль качества конвейера
- Зачем: - конвейеру нужна публикуемая сводка текущего качества с красным завершением при нарушении договоров. - Что: - добавлены DDL, публичное представление и пять сверок на естественном деловом зерне. - даг dq_check встроен после DM и публикует полные дневные партиции до именованных утверждений. - параллелизм DDS, DM и DQ приведён к измеренному лимиту памяти планировщика. - Проверка: - make lint; make config-test; make rebuild-storage. - make smoke; make check-clickhouse; make check-services. - три семейства проверок покрашены искусственными расхождениями и восстановлены повторным полным прогоном.
This commit is contained in:
1 parent
4e60aafc31
commit
26b2e5fea1
17 files changed
+753
-38
No files matched your search
@@ -121,3 +121,50 @@ ENGINE = Distributed(
|
||||
'daily_traffic_rep',
|
||||
cityHash64(report_date)
|
||||
);
|
||||
|
||||
-- Сводка качества хранит текущее состояние атомарной проверки одного дня.
|
||||
-- История запусков остаётся в Airflow, поэтому версия строки не нужна:
|
||||
-- следующий успешный прогон заменяет дневную партицию целиком.
|
||||
CREATE TABLE IF NOT EXISTS dm.dq_summary_rep ON CLUSTER clickstream_cluster
|
||||
(
|
||||
data_date Date,
|
||||
check_name LowCardinality(String),
|
||||
reference_rows UInt64,
|
||||
actual_rows UInt64,
|
||||
failed_rows UInt64,
|
||||
status LowCardinality(String),
|
||||
_load_id String,
|
||||
_load_ts DateTime64(3, 'UTC')
|
||||
)
|
||||
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{database}/{table}', '{replica}')
|
||||
PARTITION BY data_date
|
||||
ORDER BY (data_date, check_name);
|
||||
|
||||
-- Все строки одной проверки лежат на одном шарде. Таблица мала, а ключ
|
||||
-- check_name делает раскладку донора и цели одинаковой без нового измерения.
|
||||
CREATE TABLE IF NOT EXISTS dm.dq_summary_dist ON CLUSTER clickstream_cluster
|
||||
AS dm.dq_summary_rep
|
||||
ENGINE = Distributed(
|
||||
'clickstream_cluster',
|
||||
'dm',
|
||||
'dq_summary_rep',
|
||||
cityHash64(check_name)
|
||||
);
|
||||
|
||||
-- Источник и цель REPLACE PARTITION обязаны совпадать по структуре, ключам и
|
||||
-- политике хранения. Требование повторно сверено по документации ClickHouse
|
||||
-- через Context7 27 августа 2026 года; AS не даёт формам разойтись.
|
||||
CREATE TABLE IF NOT EXISTS dm.dq_summary_stage_rep ON CLUSTER clickstream_cluster
|
||||
AS dm.dq_summary_rep
|
||||
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{database}/{table}', '{replica}')
|
||||
PARTITION BY data_date
|
||||
ORDER BY (data_date, check_name);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS dm.dq_summary_stage_dist ON CLUSTER clickstream_cluster
|
||||
AS dm.dq_summary_stage_rep
|
||||
ENGINE = Distributed(
|
||||
'clickstream_cluster',
|
||||
'dm',
|
||||
'dq_summary_stage_rep',
|
||||
cityHash64(check_name)
|
||||
);
|
||||
@@ -42,3 +42,18 @@ SELECT
|
||||
_load_id,
|
||||
_load_ts
|
||||
FROM dm.daily_traffic_dist FINAL;
|
||||
|
||||
-- Сводка отвечает, какие атомарные договоры дня выполняются сейчас.
|
||||
-- Явный список не пропускает в публичный договор будущие физические колонки.
|
||||
CREATE VIEW IF NOT EXISTS dm.dq_summary_v ON CLUSTER clickstream_cluster
|
||||
AS
|
||||
SELECT
|
||||
data_date,
|
||||
check_name,
|
||||
reference_rows,
|
||||
actual_rows,
|
||||
failed_rows,
|
||||
status,
|
||||
_load_id,
|
||||
_load_ts
|
||||
FROM dm.dq_summary_dist;
|
||||
Reference in new issue
Block a user