Případy použití materializovaných zobrazení

Materializovaná zobrazení zpřístupňují agregační dotaz přes zdrojovou tabulku nebo jiné materializované zobrazení. Tento článek se zabývá běžnými a pokročilými případy použití materializovaných zobrazení.

Běžné případy použití

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

  • Aktualizovat data: Aktualizujte data vrácením posledního záznamu na entitu pomocí arg_max() (agregační funkce). Vytvořte například zobrazení, které materializuje jenom záznamy, které od této chvíle ingestují:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Snížení rozlišení dat 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í. Můžete například udržovat aktuální snímek jedinečných uživatelů za den:

    .create materialized-view UsersByDay on table T
    {
        T | summarize dcount(User) by bin(Timestamp, 1d)
    }
    
  • Odstranění duplicitních záznamů: Odstranění duplicitních záznamů v tabulce pomocí take_any() (agregační funkce) Můžete například vytvořit materializované zobrazení, které odstranění duplicitních dat zdrojové tabulky na EventId základě sloupce pomocí zpětného pohledu 6 hodin. Odstranění duplicit záznamů se pouze u záznamů přijatých 6 hodin před aktuálními záznamy.

    .create materialized-view with(lookback=6h) DeduplicatedTable on table T
    {
        T
        | summarize take_any(*) by EventId
    }
    

    Poznámka

    Zdrojovou tabulku můžete skrýt vytvořením funkce se stejným názvem jako tabulka, která místo toho odkazuje na materializované zobrazení. Tento model zajišťuje, že volající dotazující se na tabulku přistupují k materializovanému zobrazení s odstraněnými duplicitními daty, protože funkce přepíší tabulky se stejným názvem. Pokud se chcete vyhnout cyklickým odkazům v definici zobrazení, použijte funkci table() k odkazu na zdrojovou tabulku:

    .create materialized-view DeduplicatedTable on table T
    {
        table('T')
        | summarize take_any(*) by EventId
    } 
    

Další příklady najdete v příkazu .create materialized-view.

Pokročilý scénář

Pro zpracování událostí vytvoření, aktualizace nebo odstranění můžete použít materializované zobrazení. Při zpracování záznamů s neúplnými nebo zastaralými informacemi pro každý sloupec může materializované zobrazení poskytovat nejnovější aktualizace pro každý sloupec s výjimkou odstraněných entit.

Představte si následující vstupní tabulku s názvem Events:

Vstup

Timestamp Žvanec ID sloupec 1 sloupec 2 sloupec 3
2023-10-24 00:00:00.0000000 C 1 1 2
2023-10-24 01:00:00.0000000 U 1 22 33
2023-10-24 02:00:00.0000000 U 1 23
2023-10-24 00:00:00.0000000 C 2 1 2
2023-10-24 00:10:00.0000000 U 2 4
2023-10-24 02:00:00.0000000 D 2

Pomocí agregační funkce arg_max() vytvořte materializované zobrazení pro získání nejnovější aktualizace pro sloupec:

.create materialized-view ItemHistory on table Events
{
    Events
    | extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
                Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
                Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
    | summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}

Výstup

ID Timestamp_col1 sloupec 1 Timestamp_col2 sloupec 2 Timestamp_col3 sloupec 3 Timestamp Žvanec
2 2023-10-24 00:00:00.0000000 1 2023-10-24 00:10:00.0000000 4 1970-01-01 00:00:00.0000000 2023-10-24 02:00:00.0000000 D
1 2023-10-24 00:00:00.0000000 1 2023-10-24 02:00:00.0000000 23 2023-10-24 01:00:00.0000000 33 2023-10-24 02:00:00.0000000 U

Pokud chcete výsledky dále vyčistit, můžete vytvořit uloženou funkci :

ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud

Konečný výstup

Nejnovější aktualizace pro každý sloupec id 1, protože ID 2 bylo odstraněno.

Timestamp ID sloupec 1 sloupec 2 sloupec 3
2023-10-24 02:00:00.0000000 1 1 23 33

Materializovaná zobrazení vs. zásady aktualizací

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, ale zásady aktualizací ne. 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 ve zdrojové nebo cílové tabulce, dokud se nespustí všechny zásady aktualizace. Materializovaná zobrazení na druhou stranu 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řed jejich materializaci.

  • Zásady aktualizace i materializovaná zobrazení můžou zahrnovat spojení, ale jejich efektivita je omezená na konkrétní scénáře. Konkrétně jsou spojení vhodná pouze v případě, že jsou data potřebná pro spojení z obou stran přístupná v době aktualizace zásad nebo procesu materializace. Pokud se při spuštění zásad aktualizace nebo materializace ingestují odpovídající entity, existuje riziko přehlédnutí dat. Další informace najdete dimension tables v parametru dotazu materializovaného zobrazení a v tabulkách faktů a dimenzí.

Poznámka

Pokud potřebujete materializovat spojení, která nejsou vhodná pro zásady aktualizace a materializovaná zobrazení, můžete k tomu orchestrovat vlastní proces pomocí nástrojů pro orchestraci a ingestování z příkazů dotazů.