.create materialized-view
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer
Materializované zobrazení je agregační dotaz nad zdrojovou tabulkou. Představuje jeden summarize
příkaz.
Existují dva možné způsoby vytvoření materializovaného zobrazení, jak je uvedeno v možnosti backfill v příkazu:
Vytvořte materializované zobrazení odteď:
- Materializované zobrazení je vytvořené prázdné. Zahrnuje pouze záznamy ingestované po vytvoření zobrazení. Vytvoření tohoto typu se vrátí okamžitě 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 Zobrazení Backfill a materializované zobrazení.
- Dokončení vytváření může trvat dlouho v závislosti na počtu záznamů ve zdrojové tabulce. Zobrazení nebude k dispozici pro dotazy, dokud se nedokončí obnovení.
- Pokud používáte tuto možnost, příkaz create musí být
async
. Spuštění můžete monitorovat pomocí.show operations
příkazu. - Proces obnovení můžete zrušit pomocí
.cancel operation
příkazu.
Důležité
U velkých zdrojových tabulek může dokončení možnosti obnovení trvat dlouhou dobu. Pokud tento proces během běhu dojde k přechodnému selhání, nebude se opakovat automaticky. Pak musíte příkaz create znovu spustit. Další informace naleznete v tématu Backfill a materialized view.
Oprávnění
Tento příkaz vyžaduje oprávnění správce databáze. Tvůrce materializovaného zobrazení se stane správcem.
Syntaxe
.create
[] [async
ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...] )
MaterializedViewName on table
SourceTableName {
– dotaz }
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
PropertyName, PropertyValue | string |
Seznam vlastností ve formě párů názvů a hodnot 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átoru. |
SourceTableName | string |
✔️ | Název zdrojové tabulky, na které je zobrazení definováno. |
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 zadán, příkaz se ignoruje. Žádná změna se nepoužije, i když nová definice neodpovídá existující definici.ifnotexists
Pokud není příznak zadán, 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é.
Name | Typ | Popis |
---|---|---|
zavážka | bool |
Jestli chcete vytvořit zobrazení na základě všech aktuálně uložených SourceTable záznamů (true ), nebo ho odteď vytvořit (false ). Výchozí hodnota je false . Další informace naleznete v tématu Backfill a materialized view. |
effectiveDateTime | datetime |
Relevantní pouze v případech, kdy používáte backfill . Pokud je nastavená, vytváření backfills se naplní pouze záznamy přijatými po datu a času. backfill musí být nastavena také 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 hodnotu , přiřazuje se čas vytvoření rozsahu na základě klíče datetime group-by během procesu obnovení. Další informace naleznete v tématu Backfill a materialized view. |
lookback | timespan |
Platné pouze pro arg_max //arg_min take_any materializovaná zobrazení. Omezuje dobu, po kterou se očekávají duplicity. Pokud je například v zobrazení zadáno arg_max zpětné vyhledávání 6 hodin, odstranění duplicitních dat mezi nově přijatými záznamy a existujícími záznamy bude brát v úvahu pouze záznamy, které byly ingestovány až před 6 hodinami. Zpětné vyhledávání je relativní vzhledem k ingestion_time(). Pokud dotaz materializovaného ingestion_time() zobrazení hodnotu nezachová, nelze v zobrazení definovat zpětné vyhledávání. Podívejte se na omezení materializovaných zobrazení a známé problémy. Nesprávné definování období zpětného vyhledávání může vést k duplicitám v materializovaném zobrazení. Pokud se například záznam pro určitý klíč ingestuje 10 hodin po ingestování záznamu pro stejný klíč a zpětné vyhledávání je nastavené na 6 hodin, bude tento klíč v zobrazení duplicitní. Období zpětného vyhledávání se použije v době materializace i v době dotazu. |
autoUpdateSchema | bool |
Zda se má zobrazení u zdrojových tabulek automaticky aktualizovat. Výchozí hodnota 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 zdrojové tabulky se automaticky projeví v materializovaném zobrazení. |
DimensionTables | pole | Dynamický argument, který v zobrazení obsahuje pole tabulek dimenzí. Viz parametr dotazu. |
souborů | string |
Složka materializovaného zobrazení. |
docString | string |
Řetězec, který dokumentuje materializované zobrazení. |
allowMaterializedViewsWithoutRowLevelSecurity | bool |
Umožňuje vytvořit materializované zobrazení v tabulce s povolenými zásadami zabezpečení na úrovni řádků. |
Upozorňující
- Systém automaticky zakáže materializované zobrazení, pokud se změní zdrojová tabulka materializovaného zobrazení nebo změny dat, což vede k nekompatibilitě mezi materializovaným dotazem zobrazení a očekávaným materializovaným schématem zobrazení.
- Aby se této chybě zabránilo, musí být dotaz materializovaného zobrazení deterministický. Například bag_unpack nebo kontingenční modul plug-in má za následek ne deterministické schéma.
- Pokud používáte
arg_max(Timestamp, *)
agregaci a kdyautoUpdateSchema
je false, můžou změny zdrojové tabulky vést také k neshodám schématu. Vyhněte se této chybě definováním dotazu 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. - Monitorování automatického 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í přes materializované zobrazení
Materializované zobrazení můžete vytvořit v jiném materializovaném zobrazení pouze v případech, kdy je zdrojový materializovaným zobrazením take_any(*)
agregace (odstranění duplicitních dat). Další informace naleznete v tématu Materialized view over materialized view and Examples.
Syntaxe:
.create
[] [async
ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...] )
MaterializedViewName SourceMaterializedViewName {
– dotaz on materialized-view
}
Parametry:
Name | Type | Požadováno | Popis |
---|---|---|---|
PropertyName, PropertyValue | string |
Seznam vlastností ve formě párů názvů a hodnot 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átoru. |
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 přijaté odteď:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
Vytvořte materializované zobrazení pro denní agregace s možností zpětného vyplňování pomocí:
async
.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ření materializovaného zobrazení pomocí
backfill
aeffectiveDateTime
. Zobrazení se vytvoří 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 }
Pomocí zpětného vyhledávání 6 hodin vytvořte materializované zobrazení, které deduplikuje zdrojovou tabulku na
EventId
základě sloupce. Záznamy budou odstraněny z duplicitních dat pouze se záznamy ingestovanými 6 hodinami 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 materializované materializované zobrazení, které je založeno 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 obsahovat další operátory před
summarize
příkazem, pokudsummarize
je to 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á spojují tabulku 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 materializovaného zobrazení dotazu:
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 jednou nebo více skupinami 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 být lepší než materializované zobrazení, které zahrnuje tyto agregace spolu s dalšími agregacemi (například ).count
/dcount
/avg
Důvodem je, ž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á oběarg_max
//arg_min
take_any
i jiné agregace ve stejném zobrazení).Dotaz by neměl obsahovat žádné operátory, které jsou závislé 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 dobu, po kterou zobrazení pokrývá.V dotazu materializovaného zobrazení nejsou podporovány 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í jako:SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id
. Během doby zobrazení dotazu spusťteMaterializedViewName | project Id, Result=a/b
. Požadovaný výstup zobrazení, včetně počítaného sloupce (a/b
), lze zapouzdřet do uložené funkce. Přístup k uložené funkci místo přístupu k materializovanému zobrazení přímo.
- Dotazy napříč clustery a křížovými databázemi se nepodporují.
- Dotazy mezi službami Eventhouse a křížové databáze 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 povoleny všechny moduly plug-in 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 připojování k tabulkám 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 tabulek dimenzí nemají žádný vliv na záznamy, které už byly zpracovány z tabulky faktů.
Jiná latence příjmu dat mezi tabulkou faktů a tabulkou dimenzí může ovlivnit 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 už ingestoval do tabulky faktů. Tento záznam se z zobrazení zahodí a nezpracuje se znovu.
Podobně pokud je spojení vnější spojení, záznam z tabulky faktů se zpracuje a přidá, aby se zobrazila hodnota 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 z 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 týkající se výkonu
Použijte klíč datetime group-by key: Materializovaná zobrazení, která mají sloupec datetime jako jeden z jejich klíčů seskupování podle skupin, jsou efektivnější než zobrazení, která nemají. Důvodem je, že některé optimalizace se dají použít jenom v případech, kdy je klíč datetime group-by key. Pokud přidání klíče datetime group-by 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
Pozdní příchod dat v klíči datetime podle skupiny může mít negativní dopad na výkon materializovaného zobrazení. Předpokládejme například, že materializované zobrazení používá
bin(Timestamp, 1d)
jako jeden ze svých klíčů seskupených podle a nově přijatých záznamů do zdrojové tabulky mají staréTimestamp
hodnoty. Tyto záznamy můžou negativně ovlivnit materializované zobrazení.Pokud očekáváte pozdní příchozí záznamy ingestované do zdrojové tabulky, upravte zásady ukládání do mezipaměti materializovaného zobrazení odpovídajícím způsobem. Pokud se například očekává, že záznamy s časovým razítkem před šesti měsíci se budou ingestovat do zdrojové tabulky, bude proces materializace muset zkontrolovat materializované zobrazení za posledních šest měsíců. Pokud je tato doba v studené mezipaměti, materializace zaznamená neúspěšné mezipaměti, které budou mít negativní dopad na výkon zobrazení.
Pokud takové opožděné příchozí záznamy nejsou očekávané, doporučujeme, abyste v materializovaném dotazu zobrazení buď tyto záznamy odfiltrovali, nebo normalizovali hodnoty časových razítek na aktuální čas.
Definujte 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řidání sloupců často používaných k filtrování jako klíče seskupených podle: Materializované dotazy zobrazení jsou optimalizované, když jsou filtrovány jedním z materializovaných klíčů zobrazení seskupených podle. Pokud víte, že vzor dotazu bude často filtrovat podle sloupce, který je neměnný podle jedinečné entity v materializovaném zobrazení, zahrňte ho do klíčů seskupování podle materializovaného zobrazení.
Například materializované zobrazení zveřejňuje
arg_max
hodnotuResourceId
, která bude často filtrována podleSubscriptionId
. Za předpokladuResourceId
, že hodnota vždy patří do stejnéSubscriptionId
hodnoty, definujte materializovaný dotaz zobrazení jako:.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 }
Použijte zásady aktualizace tam, kde je to vhodné: Materializované zobrazení může zahrnovat transformace, normalizace a vyhledávání v tabulkách dimenzí. Doporučujeme ale přesunout tyto operace do zásad aktualizace. Ponechte pouze agregaci pro materializované zobrazení.
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 materializovaného dotazu zobrazení může být horší, 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 požadujete nejlepší výkon doby dotazu, ale můžete tolerovat určitou latenci dat, použijte funkci materialized_view().
Obnovení materializovaného zobrazení
Při vytváření materializovaného zobrazení pomocí backfill
vlastnosti se 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 backfillu na pozadí rozdělí data do několika dávek a provede několik operací ingestování pro obnovení zobrazení. Dokončení procesu může trvat dlouhou dobu, když je počet záznamů ve zdrojové tabulce velký. Doba trvání procesu závisí na velikosti databáze. Průběh backfillu můžete sledovat pomocí .show operations
příkazu.
Přechodné selhání, ke kterým dochází v rámci procesu obnovení, se opakuje. Pokud dojde k vyčerpání všech opakování, příkaz selže a bude vyžadovat ruční opětovné spuštění příkazu create.
Nedoporučujeme používat backfill, pokud 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řesunutí.
Použití možnosti zpětného vyplňování není podporováno pro data v studené mezipaměti. V případě potřeby zvyšte dobu trvání vytváření zobrazení v horké mezipaměti. To může vyžadovat horizontální navýšení kapacity.
Pokud při vytváření zobrazení dochází k chybá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 obnovení 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 časových limitů dotazů. Zvýšení této hodnoty může urychlit vytváření zobrazení za předpokladu, že databáze může spustit funkci agregace u více záznamů než výchozí.
Concurrency
: Operace ingestování spuštěné v rámci procesu obnovení se spouští souběžně. Ve výchozím nastavení jemin(number_of_nodes * 2, 5)
souběžnost . Tuto vlastnost můžete nastavit tak, aby se zvýšila nebo snížila souběžnost. Tuto hodnotu doporučujeme zvýšit pouze v případě nízkého využití procesoru databáze, protože zvýšení může výrazně ovlivnit spotřebu procesoru databáze.
Například následující příkaz obnoví materializované zobrazení z 2020-01-01
. Maximální počet záznamů v každé operaci ingestování je 3 miliony. Příkaz provede operace ingestování s souběžností 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 backfill 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 posledními záznamy, protože zásada uchovávání informací je 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í podle:
.create async materialized-view with (
backfill=true,
updateExtentsCreationTime=true
)
CustomerUsage on table T
{
T
| summarize count() by Customer, bin(Timestamp, 1d)
}
Obnovení podle rozsahů přesunu
Možnost obnovení přesunutím rozsahů backfills backfills materializované zobrazení na základě existující tabulky, což nemusí nutně být zdrojová tabulka materializovaného zobrazení. Obnovení dosáhnete přesunutím rozsahů ze zadané tabulky do podkladové materializované tabulky zobrazení. Tento proces znamená, ž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 budou odstraněny na základě definice materializovaného zobrazení.
Pokud má například materializované zobrazení následující agregaci:
T | summarize arg_max(Timestamp, *) by EventId
Záznamy ve zdrojové tabulce pro operaci rozsahů přesunutí by již měly být odstraněny EventID
.
Vzhledem k tomu, že operace používá rozsahy .move, budou záznamy odebrány ze zadané tabulky během backfillu (přesunuty, nezkopírovány).
Backfill by move extents není podporován pro všechny agregační funkce podporované v materializovaných zobrazeních. U agregací, jako avg()
je například , dcount()
se nezdaří, ve kterých se podkladová data uložená v zobrazení liší od samotné agregace.
Materializované zobrazení je znovu vyplněno pouze na základě zadané tabulky. Materializace záznamů ve zdrojové tabulce zobrazení začne ve výchozím nastavení od času vytváření zobrazení.
Pokud zdrojová tabulka materializovaného zobrazení průběžně 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 přípravou tabulky na obnovení a časem vytvoření zobrazení zahrnuty do materializovaného zobrazení. Pro zpracování tohoto scénáře můžete vlastnost nastavit source_ingestion_time_from
na počáteční čas materializovaného zobrazení ve zdrojové tabulce.
Případy použití
Možnost obnovení 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 odstraněná z duplicit pro materializované zobrazení a po vytvoření zobrazení tyto záznamy v této tabulce nepotřebujete, protože používáte jenom materializované zobrazení.
Pokud je zdrojová tabulka materializovaného zobrazení velmi velká a obnovení zobrazení založené na zdrojové tabulce nefunguje dobře kvůli omezením uvedeným dříve. V takovém případě můžete proces backfillu orchestrovat sami do dočasné tabulky pomocí ingestování z příkazů dotazu. Pokud dočasná tabulka obsahuje všechny záznamy pro backfill, vytvořte materializované zobrazení založené na této tabulce.
Můžete také použít některý z doporučených nástrojů orchestrace.
Příklady:
V následujícím příkladu tabulka
DeduplicatedTable
obsahuje jeden záznam naEventId
instanci a bude použit jako směrný plán pro materializované zobrazení. Do materializovaného zobrazení budou zahrnuty pouze záznamy, kteréT
se ingestují 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í, pouze rozsahy, jejichžDeduplicatedTable
MaxCreatedOn
hodnota je větší nežeffectiveDateTime
je zahrnuta do backfillu (přesunuta 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
amove_extents_from
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 k obnovení. 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. Obnovení 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é době mezi přípravou tabulky na backfill from (DeduplicatedTable
) a časem vytvoření zobrazení. Nenastavujte tuto vlastnost příliš daleko v minulosti. Tím by se spustil materializovaný pohled s významnou prodlevou, což 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 deduped tabulka .T
Zahrnuje všechna historická data, odstraněná duplicitní data do2020-01-01 00:00
. Příkazcreate
používáDeduplicatedTable
k obnovení materializovaného zobrazení pomocí rozsahů přesunutí. Příkazcreate
obsahuje také všechny záznamy, kteréT
byly ingestovány 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šení vytváření materializovaného zobrazení
Proces vytváření materializovaného zobrazení můžete zrušit při použití možnosti obnovení. Tato akce je užitečná, když vytváření trvá příliš dlouho a chcete ji zastavit, když je spuštěná.
Upozorňující
Materializované zobrazení nelze po spuštění tohoto příkazu obnovit.
Proces vytvoření nelze zrušit okamžitě. Zrušení příkazové signály materializace zastavit a vytvoření pravidelně kontroluje, zda bylo požadováno zrušení. Příkaz zrušit počká na maximálně 10 minut, dokud se nezruší proces vytvoření materializovaného zobrazení a pokud bylo zrušení úspěšné, vrátí se zpět.
I když zrušení nebude úspěšné během 10 minut a selhání příkazu zrušit, materializované zobrazení se pravděpodobně později v procesu vytváření zruší. Příkaz .show operations
označuje, jestli byla operace zrušena.
Pokud už operace po vydání příkazu neprobíhá .cancel operation
, příkaz ohlásí chybu.
Syntaxe
.cancel operation
operationId
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
operationId |
guid |
✔️ | ID operace vrácené příkazem .create async materialized-view . |
Výstup
Jméno | Typ | Popis |
---|---|---|
Id operace | guid |
ID .create materialized-view operace příkazu. |
Operace | string |
Typ operace. |
Spuštěno | datetime |
Počáteční čas operace vytvoření. |
CancellationState | string |
Jedna z těchto možností: Canceled successfully (vytvoření bylo zrušeno), Cancellation failed (čekání na vypršení časového limitu zrušení), (vytváření zobrazení již není spuštěné, Unknown ale touto operací nebylo zrušeno). |
ReasonPhrase | 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 | ReasonPhrase |
---|---|---|---|---|
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
značí selhání. Vytvoření pak můžete zrušit.