.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
async
pří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 table
SourceTableName{
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 true hodnotu . 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_min take_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 pokudautoUpdateSchema
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í jakoarg_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-view
SourceMaterializedViewName{
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í
async
zpě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
aeffectiveDateTime
. 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, pokudsummarize
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átorsummarize
musí být vždy posledním operátorem v dotazu.Materializované zobrazení, které zahrnuje pouze jednu
arg_max
arg_min
take_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 iarg_max
//arg_min
take_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ítwhere 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 Id
definujte materializované zobrazení takto:SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id
. Během doby dotazu zobrazení spusťte příkazMaterializedViewName | 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:
count
countif
dcount
dcountif
min
max
avg
avgif
sum
sumif
arg_max
arg_min
take_any
take_anyif
hll
make_set
make_list
make_bag
percentile
,percentiles
tdigest
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 stejnouTimestamp
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
hodnotuResourceId
, která se často filtruje podleSubscriptionId
. Za předpokladu, žeResourceId
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í jemin(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 naEventId
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 smove_extents_from
vlastností, jsou do zásypu zahrnuty pouze rozsahy, jejichžDeduplicatedTable
MaxCreatedOn
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í obousource_ingestion_time_from
move_extents_from
a označuje, že materializované zobrazení je znovu vyplněno ze dvou zdrojů:Tabulka
move_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žíteffectiveDateTime
k zahrnutí pouze rozsahů, jejichžDeduplicatedTable
MaxCreatedOn
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
. TabulkaDeduplicatedTable
je odstraněná tabulka s příponouT
. Zahrnuje všechna historická data s odstraněním duplicitních dat až do2020-01-01 00:00
. Příkazcreate
použijeDeduplicatedTable
k zasypání materializovaného zobrazení pomocí rozsahů přesunu. Příkazcreate
také zahrnuje všechny záznamy,T
které byly přijaty od2020-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 operation
id 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.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro