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řípady použití materializovaných zobrazení

Níže jsou uvedené běžné scénáře, které je možné vyřešit pomocí materializovaného zobrazení:

  • Aktualizujte data vrácením posledního záznamu na entitu pomocí arg_max() (agregační funkce).

  • Snižte rozlišení dat výpočtem pravidelné statistiky nad nezpracovanými daty. Používejte různé agregační funkce podle časového období.

    • Použijte T | summarize dcount(User) by bin(Timestamp, 1d) například k udržování aktuálního snímku jedinečných uživatelů za den.
  • Odstranění duplicit záznamů v tabulce pomocí take_any() (agregační funkce)

    • Ve scénářích odstranění duplicit může být někdy užitečné "skrýt" zdrojovou tabulku pomocí materializovaného zobrazení, aby se volající dotazující na tabulku dotazovali místo toho materializovaného zobrazení s odstraněnými duplicitami.
    • Tento model můžete implementovat tak, že vytvoříte funkci se stejným názvem jako zdrojová tabulka, která odkazuje na zobrazení místo na zdrojovou tabulku. Vzhledem k tomu, že funkce přepisuje tabulky se stejným názvem, uživatelé volají "table" ve skutečnosti dotaz na materializované zobrazení.
    • Při tom musí definice materializovaného zobrazení odkazovat na zdrojovou tabulku pomocí funkce table(), aby se zabránilo cyklickým odkazům v definici zobrazení:
      .create materialized-view MV on table T
      {
          table('T')
          | summarize take_any(*) by EventId
      } 
      

Příklady všech případů použití najdete v tématu o příkazu materialized view create.

Jak si vybrat mezi materializovanými zobrazeními a zásadami aktualizace?

Materializovaná zobrazení a zásady aktualizace fungují odlišně a slouží různým případům použití. Podle následujících pokynů určete, který z nich byste měli použít:

  • Materializovaná zobrazení jsou vhodná pro agregace, zatímco zásady aktualizace nikoli. Zásady aktualizace se spouští samostatně pro každou dávku příjmu dat, a proto můžou provádět agregace pouze v rámci stejné dávky příjmu dat. Pokud potřebujete agregační dotaz, vždy používejte materializovaná zobrazení.

  • Zásady aktualizace jsou užitečné pro transformace dat, rozšiřování pomocí tabulek dimenzí (obvykle pomocí operátoru vyhledávání) a další manipulace s daty, které se dají spustit v rámci jednoho příjmu dat.

  • Zásady aktualizace se spouštějí během doby příjmu dat. Data nejsou k dispozici pro dotazy, a to ani ve zdrojové tabulce, ani v cílových tabulkách, dokud se pro ni nespustí všechny zásady aktualizace. Materializovaná zobrazení naopak nejsou součástí kanálu příjmu dat. Proces materializace se po příjmu dat pravidelně spouští na pozadí. Záznamy ve zdrojové tabulce jsou k dispozici pro dotazy předtím, než se materializují.

  • Zásady aktualizace ani materializovaná zobrazení nejsou vhodná pro spojení. Obojí může zahrnovat spojení, ale jsou omezeny na konkrétní případy použití. Konkrétně platí, že pouze při porovnávání dat z obou stran spojení jsou k dispozici při spuštění procesu aktualizace zásad nebo materializace. Pokud se očekává, že se odpovídající entity ingestují do levé a pravé tabulky ve stejnou dobu, při spuštění zásad aktualizace nebo materializace může dojít k vynechání dat. Další informace najdete dimension tables v parametru dotazu materializovaného zobrazení a v tabulkách faktů a dimenzí.

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 nahradí existující záznamy. Nahrazení se provádí opětovným sestavením rozsahů obsahujících záznamy, které se mají nahradit. Pokud se záznamy v rozdílu neustále protínají se všemi datovými horizontálními oddíly v materializované části, každý cyklus materializace vyžaduje opětovné sestavení celé materializované části a nemusí držet krok s rychlostí příjmu dat. V takovém případě zobrazení přestane být v pořádku a rozdíl se neustále zvětšuje. Na stránce monitorování materializovaných zobrazení je vysvětleno, jak takové situace řešit.

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 Popis
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ě.

  • Motor V3: Materializovaná zobrazení fungují lépe v clusterech modulu V3 , zejména pokud je počet záznamů, které se mají v každé iteraci aktualizovat, vysoký. Pokud váš cluster není modul V3, můžete vytvořit lístek podpory a požádat o migraci.

  • 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 příkazu.create materialized-view .

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í neprovádí, pokud nejsou plně materializovaná obě zobrazení. Další informace najdete v tématu dotazy materializovaných zobrazení.

Další kroky