Materializovaná zobrazení

Materializovaná zobrazení zveřejňují agregační dotaz nad zdrojovou tabulkou nebo jiným materializovaným zobrazením.

Materializovaná zobrazení vždy vrátí aktuální výsledek agregačního dotazu (vždy aktuální). Dotazování materializovaného zobrazení je výkonnější než spuštění agregace přímo ve zdrojové tabulce.

Poznámka

Proč používat materializovaná zobrazení?

Investicem prostředků (úložiště dat, cykly procesoru na pozadí) pro materializovaná zobrazení běžně používaných agregací získáte následující výhody:

  • Zlepšení výkonu: Dotazování materializovaného zobrazení obvykle funguje lépe než dotazování zdrojové tabulky na stejné agregační funkce.

  • Čerstvost: Dotaz materializovaného zobrazení vždy vrátí nejaktuálnější výsledky bez ohledu na to, kdy k materializaci naposledy došlo. Dotaz zkombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány (část), delta a vždy poskytují nejaktuálnější výsledky.

  • Snížení nákladů:Dotazování materializovaného zobrazení spotřebovává méně prostředků z clusteru než agregace přes zdrojovou tabulku. Zásady uchovávání informací u zdrojové tabulky je možné snížit, pokud je vyžadována pouze agregace. Toto nastavení snižuje náklady na horkou mezipaměť pro zdrojovou tabulku.

Příklady případů použití najdete v tématu Případy použití materializovaného zobrazení.

Jak fungují materializovaná zobrazení

Materializované zobrazení se skládá ze dvou součástí:

  • Materializovaná část – tabulka obsahující agregované záznamy ze zdrojové tabulky, které už byly zpracovány. Tato tabulka vždy obsahuje jeden záznam pro každou kombinaci agregace seskupování.
  • Delta – nově ingestované záznamy ve zdrojové tabulce, které ještě nebyly zpracovány.

Dotazování materializovaného zobrazení kombinuje materializovanou část s rozdílovou částí a poskytuje aktuální výsledek agregačního dotazu. Offline proces materializace ingestuje nové záznamy z tabulky delta do materializované tabulky a aktualizuje existující záznamy. Pokud je průsečík mezi rozdílovou a materializovanou částí velký a mnoho záznamů vyžaduje aktualizaci, může to mít negativní dopad na proces materializace. Informace o řešení takových situací najdete v tématu Monitorování materializovaných zobrazení .

Dotazy materializovaných zobrazení

Existují 2 způsoby dotazování materializovaného zobrazení:

  • Dotaz na celé zobrazení: Když dotazujete materializované zobrazení podle jeho názvu, podobně jako dotazování tabulky, dotaz materializovaného zobrazení zkombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány ().delta

    • Dotazování materializovaného zobrazení vždy vrátí nejaktuálnější výsledky na základě všech záznamů přijatých do zdrojové tabulky. Další informace o materializovaných a ne materializovaných částech v materializovaném zobrazení najdete v tématu o tom, jak materializovaná zobrazení fungují.
    • Tato možnost nemusí fungovat nejlépe, protože potřebuje materializovat delta část během doby dotazu. Výkon v tomto případě závisí na stáří zobrazení a filtrech použitých v dotazu. Část optimalizátoru dotazů materializovaného zobrazení obsahuje možné způsoby, jak zlepšit výkon dotazů při dotazování na celé zobrazení.
  • Dotazování pouze na materializovanou část: Dalším způsobem dotazování zobrazení je použití materialized_view() funkce . Tato možnost podporuje dotazování pouze materializované části zobrazení a určuje maximální latenci, která je uživatel ochotný tolerovat.

    • Tato možnost nezaručuje, že vrátí nejaktuálnější záznamy, ale vždy by měla být výkonnější než dotazování celého zobrazení.
    • Tato funkce je užitečná pro scénáře, ve kterých jste ochotni obětovat určitou aktuálnost výkonu, například u řídicích panelů telemetrie.

Tip

Dotazy pouze na materializovanou část vždy fungují lépe než dotazování celého zobrazení. Funkci vždy používejte, materialized_view() pokud je to možné pro váš případ použití.

  • Materializovaná zobrazení se podílejí na dotazech mezi clustery nebo mezi databázemi, ale nejsou zahrnuta do sjednocení se zástupnými znamény nebo hledání.

    • Všechny následující příklady zahrnují materializovaná zobrazení s názvem ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Následující příklady nezahrnují záznamy z materializovaných zobrazení:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Optimalizátor dotazů materializovaného zobrazení

Při dotazování celého zobrazení se materializovaná část zkombinuje s delta během doby dotazu. To zahrnuje agregaci delta a spojení s materializovanou částí.

  • Dotazování celého zobrazení funguje lépe, pokud dotaz obsahuje filtry pro seskupení podle klíčů dotazu materializovaného zobrazení. Další tipy k vytvoření materializovaného zobrazení na základě vzoru dotazu najdete v části s tipy pro zvýšení výkonu.create materialized-view.
  • Optimalizátor dotazů zvolí strategie sumarizace/spojení, u které se očekává zvýšení výkonu dotazů. Například rozhodnutí o tom, jestli se má dotaz náhodně prohazovat, vychází z počtu záznamů zčásti delta . Následující vlastnosti požadavků klienta poskytují určitou kontrolu nad použitými optimalizacemi. Tyto vlastnosti můžete otestovat pomocí materializovaných dotazů zobrazení a vyhodnotit jejich dopad na výkon dotazů.
Název vlastnosti žádosti klienta Typ Description
materialized_view_query_optimization_costbased_enabled bool Pokud je tato možnost nastavená na false, zakáže optimalizaci souhrnu/spojení v dotazech materializovaného zobrazení. Používá výchozí strategie. Výchozí je true.
materialized_view_shuffle dynamic Vynuťte náhodné prohazování dotazu materializovaného zobrazení a (volitelně) zadejte konkrétní klíče pro náhodné prohazování. Podívejte se na příklady níže.

Příklady

  1. Zadejte dotaz na celé zobrazení. Nejnovější záznamy ve zdrojové tabulce jsou zahrnuty:

    ViewName
    
  2. Dotazujte pouze materializovanou část zobrazení, bez ohledu na to, kdy byla naposledy materializována.

    materialized_view("ViewName")
    
  3. Zadejte dotaz na celé zobrazení a zadejte "nápovědu", jak použít shuffle strategii. Nejnovější záznamy ve zdrojové tabulce jsou zahrnuty:

    • Příklad č. 1: náhodné prohození na Id základě sloupce (podobně jako při použití hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Příklad č. 2: náhodné na základě všech klíčů (podobně jako při použití hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Otázky výkonu

Hlavní přispěvatelé, kteří můžou ovlivnit stav materializovaného zobrazení, jsou:

  • Prostředky clusteru: Stejně jako jakýkoli jiný proces spuštěný v clusteru i materializovaná zobrazení spotřebovávají prostředky (procesor, paměť) z clusteru. Pokud je cluster přetížený, přidání materializovaných zobrazení do něj může způsobit snížení výkonu clusteru. Monitorujte stav clusteru pomocí metrik stavu clusteru. Optimalizované automatické škálování v současné době nebere v úvahu stav materializovaných zobrazení v rámci pravidel automatického škálování.

  • Překrytí s materializovanými daty: Během materializace se všechny nové záznamy ingestované do zdrojové tabulky od poslední materializace (delta) zpracují a materializují do zobrazení. Čím vyšší je průsečík mezi novými záznamy a již materializovanými záznamy, tím horší bude výkon materializovaného zobrazení. Materializované zobrazení funguje nejlépe, pokud je počet aktualizovaných záznamů (například v arg_max zobrazení) malou podmnožinou zdrojové tabulky. Pokud je potřeba aktualizovat všechny nebo většinu materializovaných záznamů zobrazení v každém materializačním cyklu, nemusí materializované zobrazení fungovat správně.

  • Rychlost příjmu dat: Ve zdrojové tabulce materializovaného zobrazení neexistují žádná pevně zakódovaná omezení objemu dat ani rychlosti příjmu dat. Doporučená rychlost příjmu dat pro materializovaná zobrazení však není vyšší než 1–2 GB/s. Vyšší rychlost příjmu dat může stále fungovat dobře. Výkon závisí na velikosti clusteru, dostupných prostředcích a množství průniku se stávajícími daty.

  • Počet materializovaných zobrazení v clusteru: Výše uvedené aspekty platí pro každé jednotlivé materializované zobrazení definované v clusteru. Každé zobrazení využívá své vlastní prostředky a mnoho zobrazení soupeří o dostupné prostředky. I když neexistují žádná pevně zakódovaná omezení počtu materializovaných zobrazení v clusteru, cluster nemusí být schopen zpracovat všechna materializovaná zobrazení, pokud je definováno mnoho. Zásady kapacity je možné upravit, pokud je v clusteru více než jedno materializované zobrazení. Zvyšte hodnotu v zásadách ClusterMinimumConcurrentOperations , aby se souběžně spustilo více materializovaných zobrazení.

  • Definice materializovaného zobrazení: Definice materializovaného zobrazení musí být definována v souladu s osvědčenými postupy pro dotazy pro zajištění nejlepšího výkonu dotazů. Další informace najdete v článku o vytváření tipů k výkonu příkazů.

Materializované zobrazení nad materializovaným zobrazením

Materializované zobrazení lze vytvořit nad jiným materializovaným zobrazením, pokud je zdrojové materializované zobrazení zobrazením odstranění duplicit. Konkrétně agregace zdrojového materializovaného zobrazení musí být take_any(*) za účelem odstranění duplicit zdrojových záznamů. Druhé materializované zobrazení může používat jakékoli podporované agregační funkce. Konkrétní informace o tom, jak vytvořit materializované zobrazení v materializovaném zobrazení, najdete v tématu .create materialized-view command.

Tip

Při dotazování materializovaného zobrazení, které je definováno v jiném materializovaném zobrazení, doporučujeme dotazovat materializovanou část pouze pomocí materialized_view() funkce. Dotazování celého zobrazení není výkonné, pokud nejsou plně materializovaná obě zobrazení. Další informace najdete v tématu dotazy materializovaných zobrazení.