.create materialized-view

Materializované zobrazení je agregační dotaz nad zdrojovou tabulkou. Představuje jeden summarize příkaz.

Materializované zobrazení můžete vytvořit dvěma způsoby, jak je uvedeno v možnosti zpětného vyplňování v příkazu:

Od této chvíle vytvořte materializované zobrazení:

  • Materializované zobrazení se vytvoří prázdné. Zahrnuje pouze záznamy ingestované po vytvoření zobrazení. Vytvoření tohoto typu se okamžitě vrátí a zobrazení je okamžitě k dispozici pro dotaz.

Vytvořte materializované zobrazení na základě existujících záznamů ve zdrojové tabulce:

  • Viz Doplnění materializovaného zobrazení.
  • Vytvoření může v závislosti na počtu záznamů ve zdrojové tabulce trvat dlouhou dobu. Zobrazení nebude k dispozici pro dotazy, dokud se nedokončí zásyp.
  • Pokud používáte tuto možnost, musí být asyncpříkaz create . Spuštění můžete monitorovat pomocí .show operations příkazu .
  • Proces zpětného vyplňování můžete zrušit pomocí .cancel operation příkazu .

Důležité

U velkých zdrojových tabulek může dokončení možnosti zpětného vyplňování trvat dlouhou dobu. Pokud tento proces během běhu přechodně selže, nebude se automaticky opakovat. Potom musíte znovu spustit příkaz create. Další informace najdete v tématu Doplnění materializovaného zobrazení.

Oprávnění

Tento příkaz vyžaduje oprávnění Správa databáze. Tvůrce materializovaného zobrazení se stane jeho správcem.

Syntax

.create [async] [ifnotexists] materialized-view [ with(PropertyName=PropertyValue,...)] MaterializedViewNameon tableSourceTableName{Dotazu}

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
PropertyName, PropertyValue string Seznam vlastností ve formě párů název a hodnota ze seznamu podporovaných vlastností
MaterializedViewName string ✔️ Název materializovaného zobrazení Název zobrazení nemůže být v konfliktu s názvy tabulek nebo funkcí ve stejné databázi a musí dodržovat pravidla pojmenování identifikátorů.
SourceTableName string ✔️ Název zdrojové tabulky, ve které je definováno zobrazení.
Dotaz string ✔️ Definice dotazu materializovaného zobrazení Další informace a omezení najdete v části Parametr dotazu .

Poznámka

Pokud materializované zobrazení již existuje:

  • ifnotexists Pokud je příznak zadaný, příkaz se ignoruje. Žádná změna se nepoužije, i když nová definice neodpovídá stávající definici.
  • Pokud příznak ifnotexists není zadaný, vrátí se chyba.
  • Chcete-li změnit existující materializované zobrazení, použijte příkaz .alter materialized-view .

Podporované vlastnosti

Následující vlastnosti jsou podporovány v klauzuli with(PropertyName=PropertyValue) . Všechny vlastnosti jsou volitelné.

Název Typ Description
zpětné vyplňování bool Jestli chcete vytvořit zobrazení založené na všech záznamech aktuálně v SourceTable (true), nebo ho vytvořit od této chvíle (false). Výchozí je false. Další informace najdete v tématu Doplnění materializovaného zobrazení.
effectiveDateTime datetime Relevantní pouze v případech, kdy používáte backfill. Pokud je tato možnost nastavená, vytvoří se backfill pouze se záznamy přijatými po datu a čase. backfill musí být také nastavena na truehodnotu . Tato vlastnost očekává literál datetime; Například effectiveDateTime=datetime(2019-05-01).
updateExtentsCreationTime bool Relevantní pouze v případech, kdy používáte backfill. Pokud je nastavená na true, čas vytvoření rozsahu se přiřadí na základě klíče datetime group-by během procesu zpětného vyplňování. Další informace najdete v tématu Doplnění materializovaného zobrazení.
zpětné vyhledávání timespan Platí pouze pro arg_max//arg_mintake_any materializovaná zobrazení. Omezuje časové období, ve kterém se očekávají duplicity. Pokud je například v arg_max zobrazení zadané zpětné vyhledávání 6 hodin, bude odstranění duplicitních dat mezi nově přijatými a existujícími záznamy brát v úvahu pouze záznamy, které byly přijaty před 6 hodinami.

Lookback je relativní k ingestion_time. Nesprávné definování období zpětného vyhledávání může vést k duplicitám v materializovaném zobrazení. Pokud je například záznam pro konkrétní klíč přijat 10 hodin po ingestování záznamu pro stejný klíč a zpětné vyhledávání je nastaveno na 6 hodin, bude tento klíč v zobrazení duplicitní. Období zpětného vyhledávání se použije jak v době materializace , tak v době dotazu.
autoUpdateSchema bool Jestli se má automaticky aktualizovat zobrazení pro změny zdrojové tabulky. Výchozí je false. Tato možnost je platná pouze pro zobrazení typu arg_max(Timestamp, *)//arg_min(Timestamp, *)take_any(*) (pouze v případě, že argument sloupce je ).* Pokud je tato možnost nastavená na true, změny ve zdrojové tabulce se automaticky projeví v materializovaném zobrazení.
dimensionTables array Dynamický argument, který obsahuje pole tabulek dimenzí v zobrazení. Viz Parametr dotazu.
Složky string Složka materializovaného zobrazení
docString string Řetězec, který dokumentuje materializované zobrazení.
allowMaterializedViewsWithoutRowLevelSecurity bool Umožňuje vytvořit materializované zobrazení tabulky s povolenými zásadami zabezpečení na úrovni řádků.

Upozornění

  • Systém materializované zobrazení automaticky zakáže, pokud změny ve zdrojové tabulce materializovaného zobrazení nebo změny v datech povedou k nekompatibilitě mezi dotazem materializovaného zobrazení a očekávaným materializovaným schématem zobrazení.
  • Chcete-li se této chybě vyhnout, musí být dotaz materializovaného zobrazení deterministický. Výsledkem bag_unpack nebo kontingenčního modulu plug-in je například ne deterministické schéma.
  • Pokud používáte arg_max(Timestamp, *) agregaci a pokud autoUpdateSchema je hodnota false, můžou změny ve zdrojové tabulce vést také k neshodám schématu. Tomuto selhání se vyhněte tak, že definujete dotaz zobrazení jako arg_max(Timestamp, Column1, Column2, ...), nebo pomocí autoUpdateSchema možnosti .
  • Použití autoUpdateSchema může vést k nevratné ztrátě dat při vyřazení sloupců ve zdrojové tabulce.
  • Monitorujte automatické zakázání materializovaných zobrazení pomocí metriky MaterializedViewResult.
  • Po opravě problémů s nekompatibilitou byste měli zobrazení explicitně znovu povolit pomocí příkazu povolit materializované zobrazení .

Vytvoření materializovaného zobrazení v materializovaném zobrazení

Materializované zobrazení můžete vytvořit v jiném materializovaném zobrazení pouze v případech, kdy je take_any(*) zdrojové materializované zobrazení agregací (odstranění duplicitních dat). Další informace najdete v tématech Materializované zobrazení nad materializovaným zobrazením a Příklady.

Syntaxe:

.create [async] [ifnotexists] materialized-view [ with(PropertyName=PropertyValue,...)] MaterializedViewNameon materialized-viewSourceMaterializedViewName{Dotazu}

Parametry:

Název Typ Vyžadováno Popis
PropertyName, PropertyValue string Seznam vlastností ve formě párů název a hodnota ze seznamu podporovaných vlastností
MaterializedViewName string ✔️ Název materializovaného zobrazení Název zobrazení nemůže být v konfliktu s názvy tabulek nebo funkcí ve stejné databázi a musí dodržovat pravidla pojmenování identifikátorů.
SourceMaterializedViewName string ✔️ Název zdrojového materializovaného zobrazení, na kterém je zobrazení definováno.
Dotaz string ✔️ Definice dotazu materializovaného zobrazení

Příklady

  • Vytvořte prázdné arg_max zobrazení, které bude materializovat pouze záznamy ingestované od této chvíle:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Pomocí příkazu vytvořte materializované zobrazení pro denní agregace s možností asynczpětného vyplňování:

    .create async materialized-view with (backfill=true, docString="Customer telemetry") CustomerUsage on table T
    {
        T 
        | extend Day = bin(Timestamp, 1d)
        | summarize count(), dcount(User), max(Duration) by Customer, Day 
    } 
    
  • Vytvořte materializované zobrazení pomocí backfill a effectiveDateTime. Zobrazení se vytváří pouze na základě záznamů z data a času.

    .create async materialized-view with (backfill=true, effectiveDateTime=datetime(2019-01-01)) CustomerUsage on table T 
    {
        T 
        | extend Day = bin(Timestamp, 1d)
        | summarize count(), dcount(User), max(Duration) by Customer, Day
    } 
    
  • Vytvořte materializované zobrazení, které odstranění duplicitních dat ze zdrojové tabulky na EventId základě sloupce vytvoří pomocí zpětného pohledu 6 hodin. Záznamy budou odstraněny z duplicitních dat 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
    }
    
  • Vytvořte zobrazení materializovaného převzorkování dolů, které je založené na předchozím DeduplicatedTable materializovaném zobrazení:

    .create materialized-view DailyUsage on materialized-view DeduplicatedTable
    {
        DeduplicatedTable
        | summarize count(), dcount(User) by Day=bin(Timestamp, 1d)
    }
    
  • Definice může před příkazem summarize obsahovat další operátory, pokud summarize je poslední:

    .create materialized-view CustomerUsage on table T 
    {
        T 
        | where Customer in ("Customer1", "Customer2", "CustomerN")
        | parse Url with "https://contoso.com/" Api "/" *
        | extend Month = startofmonth(Timestamp)
        | summarize count(), dcount(User), max(Duration) by Customer, Api, Month
    }
    
  • Tady jsou materializovaná zobrazení, která se spojují s tabulkou dimenzí:

    .create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T
    {
        T
        | lookup DimUsers on User  
        | summarize arg_max(Timestamp, *) by User 
    }
    
    .create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T 
    {
        DimUsers | project User, Age, Address
        | join kind=rightouter hint.strategy=broadcast T on User
        | summarize arg_max(Timestamp, *) by User 
    }
    

Poznámky

Parametr dotazu

Následující pravidla omezují dotaz použitý v parametru dotazu materializovaného zobrazení:

  • Dotaz by měl odkazovat na jednu tabulku faktů, která je zdrojem materializovaného zobrazení. Měl by obsahovat jeden summarize operátor a jednu nebo více agregačních funkcí agregovaných podle jedné nebo více skupin podle výrazů. Operátor summarize musí být vždy posledním operátorem v dotazu.

    Materializované zobrazení, které zahrnuje pouze jednu arg_maxarg_mintake_any//agregaci, může fungovat lépe než materializované zobrazení, které obsahuje tyto agregace spolu s dalšími agregacemi (například ).count/dcount/avg Je to proto, že některé optimalizace jsou relevantní pouze pro tyto druhy materializovaných zobrazení. Nepoužijí se, pokud zobrazení obsahuje smíšené agregační funkce (kde smíšený znamená agregace i arg_max//arg_mintake_any jiné agregace ve stejném zobrazení).

  • Dotaz by neměl obsahovat žádné operátory, které závisí na now(). Dotaz by například neměl mít where Timestamp > ago(5d). Pomocí zásad uchovávání informací v materializovaném zobrazení omezte časové období, které zobrazení pokrývá.

  • Dotaz materializovaného zobrazení nepodporuje následující operátory: sort, top-nested, top, , partition. serialize

  • Složené agregace nejsou podporovány v definici materializovaného zobrazení. Například místo použití SourceTableName | summarize Result=sum(Column1)/sum(Column2) by Iddefinujte materializované zobrazení takto: SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id. Během doby dotazu zobrazení spusťte příkaz MaterializedViewName | project Id, Result=a/b. Požadovaný výstup zobrazení, včetně počítaného sloupce (a/b), může být zapouzdřen v uložené funkci. Přístup k uložené funkci místo přímého přístupu k materializovanému zobrazení.

  • Dotazy napříč clustery a mezi databázemi se nepodporují.

  • Odkazy na external_table() a externaldata se nepodporují.

  • Dotaz materializovaného zobrazení nemůže obsahovat žádné popisky, které vyžadují zosobnění. Konkrétně nejsou povolené všechny moduly plug-in pro připojení dotazů , které používají zosobnění.

  • Kromě zdrojové tabulky zobrazení může dotaz odkazovat na jednu nebo více tabulek dimenzí. Tabulky dimenzí musí být explicitně označeny ve vlastnostech zobrazení. Při spojování s tabulkami dimenzí je důležité pochopit následující chování:

    • Záznamy ve zdrojové tabulce zobrazení (tabulka faktů) jsou materializovány pouze jednou. Aktualizace do tabulek dimenzí nemají žádný vliv na záznamy, které už byly z tabulky faktů zpracovány.

    • Rozdílná latence příjmu dat mezi tabulkou faktů a tabulkou dimenzí může mít vliv na výsledky zobrazení.

      Příklad: Definice zobrazení obsahuje vnitřní spojení s tabulkou dimenzí. V době materializace nebyl záznam dimenze plně přijat, ale již byl přijat do tabulky faktů. Tento záznam se ze zobrazení vyřadí a už se nikdy nezpracuje.

      Podobně pokud je spojení vnější spojení, záznam z tabulky faktů se zpracuje a přidá do zobrazení s hodnotou null pro sloupce tabulky dimenzí. Záznamy, které už byly přidány (s hodnotami null) do zobrazení, se znovu nezpracují. Jejich hodnoty ve sloupcích tabulky dimenzí zůstanou null.

Podporované agregační funkce

Podporují se následující agregační funkce:

Tipy pro zvýšení výkonu

  • Použití klíče seskupené podle data a času: Materializovaná zobrazení, která mají sloupec datetime jako jeden ze seskupovaných klíčů, jsou efektivnější než ta, která je nemají. Důvodem je to, že některé optimalizace se dají použít jenom v případech, kdy existuje klíč seskupit podle data a času. Pokud přidání klíče seskupování datetime nezmění sémantiku agregace, doporučujeme ho přidat. Můžete to udělat jenom v případě, že je sloupec datetime neměnný pro každou jedinečnou entitu.

    Například v následující agregaci:

        SourceTable | summarize take_any(*) by EventId
    

    Pokud EventId má vždy stejnou Timestamp hodnotu, a proto přidání Timestamp nezmění sémantiku agregace, je lepší definovat zobrazení takto:

        SourceTable | summarize take_any(*) by EventId, Timestamp
    

    Tip

    Zpožděná data v klíči seskupení podle data a času můžou mít negativní vliv na výkon materializovaného zobrazení. Předpokládejme například, že materializované zobrazení používá bin(Timestamp, 1d) jako jeden ze seskupovacích klíčů a několik odlehlých hodnot v datech má velmi staré Timestamp hodnoty. Tyto odlehlé hodnoty můžou mít negativní vliv na materializované zobrazení.

    V dotazu materializovaného zobrazení doporučujeme buď odfiltrovat odlehlé záznamy, nebo tyto záznamy normalizovat na aktuální čas.

  • Definování období zpětného vyhledávání: Pokud je to možné pro váš scénář, přidání lookback vlastnosti může výrazně zlepšit výkon dotazů. Podrobnosti najdete v tématu Podporované vlastnosti.

  • Přidejte sloupce, které se často používají k filtrování jako klíče podle seskupení: Dotazy materializovaného zobrazení se optimalizují, když se filtrují podle jednoho z klíčů seskupení materializovaného zobrazení. Pokud víte, že vzor dotazu často filtruje podle sloupce, který je neměnný podle jedinečné entity v materializovaném zobrazení, zahrňte ho do klíčů seskupování materializovaného zobrazení.

    Materializované zobrazení například zveřejňuje arg_max hodnotu ResourceId , která se často filtruje podle SubscriptionId. Za předpokladu, že ResourceId hodnota vždy patří ke stejné SubscriptionId hodnotě, definujte dotaz materializovaného zobrazení takto:

    .create materialized-view ArgMaxResourceId on table FactResources
    {
        FactResources | summarize arg_max(Timestamp, *) by SubscriptionId, ResourceId 
    }
    

    Předchozí definice je vhodnější než následující:

    .create materialized-view ArgMaxResourceId on table FactResources
    {
        FactResources | summarize arg_max(Timestamp, *) by ResourceId 
    }
    
  • Tam, kde je to vhodné, použijte zásady aktualizace: Materializované zobrazení může zahrnovat transformace, normalizace a vyhledávání v tabulkách dimenzí. Doporučujeme ale tyto operace přesunout do zásad aktualizace. Pro materializované zobrazení ponechte pouze agregaci.

    Je například lepší definovat následující zásady aktualizace:

    .alter-merge table Target policy update 
    @'[{"IsEnabled": true, 
        "Source": "SourceTable", 
        "Query": 
            "SourceTable 
            | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId)", 
            | lookup DimResources on ResourceId
            | mv-expand Events
        "IsTransactional": false}]'  
    

    A definujte následující materializované zobrazení:

    .create materialized-view Usage on table Events
    {
        Target 
        | summarize count() by ResourceId 
    }
    

    Alternativní možnost zahrnutí zásady aktualizace jako součásti dotazu materializovaného zobrazení může mít horší výkon, a proto se nedoporučuje:

    .create materialized-view Usage on table SourceTable
    {
        SourceTable
        | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId)
        | lookup DimResources on ResourceId
        | mv-expand Events
        | summarize count() by ResourceId
    }
    

Tip

Pokud potřebujete nejlepší čas dotazování, ale můžete tolerovat určitou latenci dat, použijte funkci materialized_view().

Zpětné vyplnění materializovaného zobrazení

Při vytváření materializovaného zobrazení pomocí vlastnosti se backfill materializované zobrazení vytvoří na základě záznamů dostupných ve zdrojové tabulce. Nebo se vytvoří na základě podmnožina těchto záznamů, pokud použijete effectiveDateTime.

Proces zpětného vyplňování na pozadí rozdělí data do několika dávek a provede několik operací ingestování, které znovu naplní zobrazení. Dokončení procesu může dlouho trvat, pokud je počet záznamů ve zdrojové tabulce velký. Doba trvání procesu závisí na velikosti clusteru. Průběh zpětného vyplňování můžete sledovat pomocí .show operations příkazu .

Přechodná selhání, ke kterým dochází v rámci procesu zpětného vyplňování, se budou opakovat. Pokud jsou všechny opakování vyčerpány, příkaz selže a bude vyžadovat ruční opětovné spuštění příkazu create.

Nedoporučujeme používat zpětné vyplňování, když počet záznamů ve zdrojové tabulce překročí number-of-nodes X 200 million (někdy i méně, v závislosti na složitosti dotazu). Alternativou je možnost zpětného vyplňování podle rozsahů přesunu .

Použití možnosti backfillu se nepodporuje pro data v studené mezipaměti. V případě potřeby zvyšte dobu trvání horké mezipaměti po dobu vytváření zobrazení. To může vyžadovat horizontální navýšení kapacity.

Pokud při vytváření zobrazení dojde k selháním, zkuste změnit tyto vlastnosti:

  • MaxSourceRecordsForSingleIngest: Ve výchozím nastavení je počet zdrojových záznamů v každé operaci ingestování během zpětného vyplňování 2 miliony na uzel. Toto výchozí nastavení můžete změnit nastavením této vlastnosti na požadovaný počet záznamů. (Hodnota je celkový počet záznamů v každé operaci ingestování.)

    Snížení této hodnoty může být užitečné při selhání vytváření limitů paměti nebo vypršení časových limitů dotazů. Zvýšení této hodnoty může urychlit vytváření zobrazení za předpokladu, že cluster může agregační funkci spustit na více záznamech, než je výchozí.

  • Concurrency: Operace ingestování, které běží v rámci procesu zpětného vyplňování, běží souběžně. Ve výchozím nastavení je min(number_of_nodes * 2, 5)souběžnost . Tuto vlastnost můžete nastavit na zvýšení nebo snížení souběžnosti. Tuto hodnotu doporučujeme zvýšit pouze v případě, že je procesor clusteru nízký, protože zvýšení může výrazně ovlivnit spotřebu procesoru clusteru.

Například následující příkaz znovu doplní materializované zobrazení z .2020-01-01 Maximální počet záznamů v každé operaci příjmu je 3 miliony. Příkaz provede operace ingestování se souběžností příkazu 2.

.create async materialized-view with (
        backfill=true,
        effectiveDateTime=datetime(2020-01-01),
        MaxSourceRecordsForSingleIngest=3000000,
        Concurrency=2
    )
    CustomerUsage on table T
{
    T
    | summarize count(), dcount(User), max(Duration) by Customer, bin(Timestamp, 1d)
} 

Pokud materializované zobrazení obsahuje klíč datetime group-by, proces zpětného vyplňování podporuje přepsání času vytvoření rozsahu na základě sloupce datetime. To může být užitečné, například pokud chcete, aby starší záznamy byly vyřazeny před těmi nedávnými, protože zásady uchovávání informací jsou založené na době vytváření rozsahu. Vlastnost updateExtentsCreationTime je podporována pouze v případě, že zobrazení obsahuje klíč datetime group-by, který používá bin() funkci. Například následující backfill přiřadí čas vytvoření na Timestamp základě klíče seskupování:

.create async materialized-view with (
        backfill=true,
        updateExtentsCreationTime=true
    )
    CustomerUsage on table T
{
    T
    | summarize count() by Customer, bin(Timestamp, 1d)
} 

Backfill by move extents

Možnost backfilling by moves extents backfills materializované zobrazení na základě existující tabulky, což nemusí být nutně zdrojová tabulka materializovaného zobrazení. Zpětného vyplňování dosáhnete přesunutím rozsahů ze zadané tabulky do podkladové materializované tabulky zobrazení. Z tohoto procesu vyplývá, že:

  • Data v zadané tabulce by měla mít stejné schéma jako schéma materializovaného zobrazení.
  • Záznamy v zadané tabulce se přesunou do zobrazení tak, jak jsou. Předpokládá se, že jsou odstraněny na základě definice materializovaného zobrazení.

Pokud má materializované zobrazení například následující agregaci:

T | summarize arg_max(Timestamp, *) by EventId

Záznamy ve zdrojové tabulce pro operaci rozsahů přesunu by již měly být odstraněny pomocí EventID.

Vzhledem k tomu, že operace používá rozsahy .move, záznamy se během zpětného vyplňování odeberou z zadané tabulky (přesunou, nezkopírují se).

U všech agregačních funkcí podporovaných v materializovaných zobrazeních se backfill podle rozsahů přesunu nepodporuje. Dojde k selhání u agregací, jako avg()je , dcount()ve kterých se podkladová data uložená v zobrazení liší od samotné agregace.

Materializované zobrazení je zpětně vyplněno pouze na základě zadané tabulky. Materializace záznamů ve zdrojové tabulce zobrazení bude ve výchozím nastavení začínat časem vytvoření zobrazení.

Pokud zdrojová tabulka materializovaného zobrazení nepřetržitě ingestuje data, může vytvoření zobrazení pomocí rozsahů přesunutí způsobit ztrátu dat. Důvodem je to, že záznamy ingestované do zdrojové tabulky nebudou v krátkém čase mezi dobou přípravy tabulky na zpětné vyplnění a časem vytvoření zobrazení zahrnuty do materializovaného zobrazení. Chcete-li tento scénář zvládnout, můžete nastavit source_ingestion_time_from vlastnost na čas zahájení materializovaného zobrazení ve zdrojové tabulce.

Případy použití

Možnost zpětného vyplňování pomocí rozsahů přesunu může být užitečná ve dvou hlavních scénářích:

  • Pokud už máte tabulku, která obsahuje zdrojová data s odstraněnými duplicitními daty pro materializované zobrazení, a po vytvoření zobrazení tyto záznamy v této tabulce nepotřebujete, protože používáte pouze materializované zobrazení.

  • Když je zdrojová tabulka materializovaného zobrazení velmi velká a zpětné vyplňování zobrazení založené na zdrojové tabulce nefunguje dobře kvůli výše uvedeným omezením. V takovém případě můžete proces zpětného vyplňování orchestrovat sami do dočasné tabulky pomocí ingestování z příkazů dotazu a jednoho z doporučených nástrojů orchestrace. Pokud dočasná tabulka obsahuje všechny záznamy pro backfill, vytvořte materializované zobrazení založené na této tabulce.

Příklady:

  • V následujícím příkladu tabulka DeduplicatedTable obsahuje jeden záznam na EventId instanci a použije se jako směrný plán pro materializované zobrazení. Do materializovaného zobrazení budou zahrnuty pouze záznamy, T které jsou ingestovány po vytvoření zobrazení.

    .create async materialized-view with (move_extents_from=DeduplicatedTable) MV on table T
    {
        T
        | summarize arg_max(Timestamp, *) by EventId
    } 
    
  • effectiveDateTime Pokud je vlastnost zadána spolu s move_extents_from vlastností, jsou do zásypu zahrnuty pouze rozsahy, jejichž DeduplicatedTableMaxCreatedOn hodnota je větší než effectiveDateTime (přesunuto do materializovaného zobrazení):

    .create async materialized-view with 
        (move_extents_from=DeduplicatedTable, effectiveDateTime=datetime(2019-01-01)) 
        MV on table T
    {
        T
        | summarize arg_max(Timestamp, *) by EventId
    } 
    
  • Následující příklad ukazuje použití source_ingestion_time_from vlastnosti v možnosti backfilling podle rozsahů přesunutí. Použití obou source_ingestion_time_frommove_extents_from a označuje, že materializované zobrazení je znovu vyplněno ze dvou zdrojů:

    • Tabulkamove_extents_from: DeduplicatedTable v následujícím příkladu. Tato tabulka by měla obsahovat všechna historická data pro zpětné vyplňování. Volitelně můžete vlastnost použít effectiveDateTime k zahrnutí pouze rozsahů, jejichž DeduplicatedTableMaxCreatedOn hodnota je větší než effectiveDateTime.

    • Zdrojová tabulka materializovaného zobrazení: T v následujícím příkladu. Backfill z této tabulky obsahuje pouze záznamy, jejichž hodnota ingestion_time() je větší než source_ingestion_time_from.

      Vlastnost source_ingestion_time_from by měla být použita pouze ke zpracování možné ztráty dat v krátkém čase mezi přípravou tabulky na backfill z (DeduplicatedTable) a časem vytvoření zobrazení. Nenastavujte tuto vlastnost příliš daleko v minulosti. Tím by materializované zobrazení začalo s výrazným zpožděním, které by mohlo být obtížné dohnat.

    V následujícím příkladu předpokládejme, že aktuální čas je 2020-01-01 03:00. Tabulka DeduplicatedTable je odstraněná tabulka s příponou T. Zahrnuje všechna historická data s odstraněním duplicitních dat až do 2020-01-01 00:00. Příkaz create použije DeduplicatedTable k zasypání materializovaného zobrazení pomocí rozsahů přesunu. Příkaz create také zahrnuje všechny záznamy, T které byly přijaty od 2020-01-01.

    .create async materialized-view with (move_extents_from=DeduplicatedTable, source_ingestion_time_from=datetime(2020-01-01)) MV on table T
    {
        T
        | summarize arg_max(Timestamp, *) by EventId
    } 
    

Zrušit vytváření materializovaného zobrazení

Proces vytváření materializovaného zobrazení můžete zrušit, když používáte možnost zpětného vyplňování. Tato akce je užitečná, když vytváření trvá příliš dlouho a chcete ho zastavit, když je spuštěné.

Upozornění

Materializované zobrazení nelze po spuštění tohoto příkazu obnovit.

Proces vytváření nelze okamžitě zrušit. Příkaz zrušení signalizuje materializaci k zastavení a vytváření pravidelně kontroluje, jestli bylo požadováno zrušení. Příkaz zrušit počká maximálně 10 minut, dokud se proces vytvoření materializovaného zobrazení nezruší, a pokud bylo zrušení úspěšné, vrátí zprávu.

I v případě, že zrušení neprojde během 10 minut úspěšně a příkaz pro zrušení hlásí chybu, materializované zobrazení se pravděpodobně později v procesu vytváření samo zruší. Příkaz .show operations označuje, jestli byla operace zrušena.

Pokud už operace při .cancel operation vydání příkazu neprobíhá, příkaz ohlásí chybu s oznámením.

Syntax

.cancel operationid operace

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
operationId guid ✔️ ID operace vrácené příkazem .create async materialized-view .

Výstup

Název Typ Description
Id operace guid ID .create materialized-view operace příkazu.
Operace string Typ operace.
Spuštěno datetime Čas zahájení operace vytvoření.
CancellationState string Jedna z těchto možností: Canceled successfully (vytváření bylo zrušeno), Cancellation failed (čekání na zrušení vypršelo) Unknown (vytváření zobrazení už neběží, ale tato operace ho nezrušila).
Fráze důvodu string Důvod, proč zrušení nebylo úspěšné.

Příklady

.cancel operation c4b29441-4873-4e36-8310-c631c35c916e
ID operace Operace Spuštěno CancellationState Fráze důvodu
c4b29441-4873-4e36-8310-c631c35c916e MaterializedViewCreateOrAlter 2020-05-08 19:45:03.9184142 Canceled successfully

Pokud se zrušení nedokončilo do 10 minut, CancellationState bude to znamenat selhání. Vytváření pak můžete zrušit.