Zpět na domů

MV v ClickHouse: ztráta dat a kontrola

Článek rozebírá mechanismy ztráty dat v materializovaných zobrazeních ClickHouse při změnách schémat tabulek. Jsou popsána blokové vkládání, nastavení ignore_errors a monitorování prostřednictvím system.query_views_log. Doporučení pro stabilní pipeline.

Ztráta dat v MV ClickHouse: jak se chránit
Advertisement 728x90

Materializovaná zobrazení v ClickHouse: scénáře ztráty dat

Materializovaná zobrazení (MV) v ClickHouse fungují jako spouštěče na INSERT v prostředí pouze pro připojování. Zachycují změny dat bez podpory UPDATE nebo DELETE. MV jsou spolehlivá při dodržení pravidel, ale změny schémat tabulek vedou ke ztrátě dat.

Klíčové riziko: ClickHouse umožňuje modifikovat zdrojové i cílové tabulky nezávisle na aktivních MV. To odlišuje systém od tradičních SŘBD.

Klasické schéma fungování

Vytvořte testovací tabulky a MV pro demonstraci:

Google AdInline article slot
-- Zdrojová tabulka
DROP TABLE IF EXISTS test_orders;
CREATE TABLE test_orders (
    order_id String,
    order_dt Datetime
)
ENGINE = MergeTree
ORDER BY order_id;

-- Cílová tabulka
DROP TABLE IF EXISTS final_test_orders;
CREATE TABLE final_test_orders (
    order_id String,
    order_dt Datetime
)
ENGINE = MergeTree
ORDER BY order_id;

-- MV pro přesměrování dat
DROP VIEW IF EXISTS mv_final_test_orders;
CREATE MATERIALIZED VIEW mv_final_test_orders
TO default.final_test_orders (
    order_id String,
    order_dt Datetime
)
AS SELECT order_id, order_dt FROM test_orders;

Vložte data:

INSERT INTO test_orders VALUES 
('QWE123', '2025-03-01 12:00:00'),
('RTY456', '2025-03-01 13:00:00'),
('XYZ789', '2025-03-01 14:00:00');

Dotaz SELECT * FROM final_test_orders vrátí všechny záznamy správně.

Porušení schématu cílové tabulky

Změňte typ sloupce v final_test_orders:

Google AdInline article slot
DROP TABLE IF EXISTS final_test_orders;
CREATE TABLE final_test_orders (
    order_id UInt64,
    order_dt Datetime
)
ENGINE = MergeTree
ORDER BY order_id;

Opakujte vložení do test_orders. MV vyvolá chybu převodu String na UInt64. Data se zapíší do zdrojové tabulky, ale ne do cílové. INSERT selže kvůli blokové atomaritě.

ClickHouse vkládá data bloky. Chyba v MV přeruší celý INSERT, ale částečné bloky mohou zůstat zachovány.

Ignorování chyb MV

Nastavení materialized_views_ignore_errors=true potlačuje chyby MV:

Google AdInline article slot
INSERT INTO test_orders SETTINGS materialized_views_ignore_errors = true VALUES 
('QWE123', '2025-03-01 12:00:00'),
('RTY456', '2025-03-01 13:00:00'),
('XYZ789', '2025-03-01 14:00:00');

Data se uloží v test_orders, ale v final_test_orders chybí. Jedná se o kontrolovanou ztrátu v cílové tabulce.

Monitorování chyb prostřednictvím systémových logů

Použijte system.query_views_log pro sledování selhání MV:

SELECT event_time, view_name, exception
FROM system.query_views_log 
WHERE event_date = today() AND exception_code != 0
ORDER BY event_time DESC
LIMIT 1000;

Dotaz vrátí časové razítko chyby, název MV a text výjimky. Nastavte upozornění na tyto události pro produkční prostředí.

Kombinace materialized_views_ignore_errors=true a monitorování minimalizuje rizika.

Nekontrolované ztráty při nesouladu sloupců

MV používá názvy sloupců, ne pozice. Chybějící sloupce se vyplní výchozími hodnotami bez chyb.

Přejmenujte sloupec:

DROP TABLE IF EXISTS final_test_orders;
CREATE TABLE final_test_orders (
    orders String,
    order_dt Datetime
)
ENGINE = MergeTree
ORDER BY orders;

Vložení do test_orders proběhne úspěšně. V final_test_orders se sloupec orders vyplní prázdnými řetězci — data se ztratí bez symptomů.

Doporučení pro provoz MV

  • Zkontrolujte přítomnost sloupců v cílové tabulce při vytváření MV.
  • Otestujte MV po nasazení.
  • Vyhněte se změnám schémat tabulek s aktivními MV.
  • Implementujte upozornění na system.query_views_log.

Co je důležité:

  • MV — nekontrolovaný ETL bez transakčních záruk.
  • Blokové vložení vytváří riziko částečných ztrát při chybách.
  • materialized_views_ignore_errors=true zachovává zdrojová data, ale vyžaduje monitorování.
  • Nesoulad názvů sloupců vede k tichým selháním.
  • Dokumentace ClickHouse varuje před riziky MV.

— Editorial Team

Advertisement 728x90

Číst dál