.create materialized-view
A materializált nézet egy forrástáblán keresztüli összesítő lekérdezés. Egyetlen summarize
utasítást jelöl.
A materializált nézetet kétféleképpen hozhatja létre, amint azt a parancs visszatöltési lehetősége is jelzi:
Hozza létre a materializált nézetet mostantól:
- A materializált nézet üresen jön létre. Csak a nézet létrehozása után betöltött rekordokat tartalmazza. Az ilyen típusú létrehozás azonnal visszatér, és a nézet azonnal elérhető a lekérdezéshez.
Hozza létre a materializált nézetet a forrástábla meglévő rekordjai alapján:
- Lásd: Materializált nézet visszatöltése.
- A létrehozás a forrástáblában lévő rekordok számától függően hosszú ideig is eltarthat. A nézet nem lesz elérhető a lekérdezésekhez, amíg a visszatöltés be nem fejeződik.
- Ha ezt a lehetőséget használja, a create parancsnak a következőnek kell lennie
async
: . A végrehajtást az.show operations
paranccsal figyelheti. - A visszatöltési folyamatot az
.cancel operation
paranccsal szakíthatja meg.
Fontos
Nagy forrástáblák esetén a visszatöltési lehetőség végrehajtása hosszú időt vehet igénybe. Ha ez a folyamat futás közben átmenetileg meghiúsul, a rendszer nem próbálkozik automatikusan. Ezután újra végre kell hajtania a létrehozási parancsot. További információ: Materializált nézet visszatöltése.
Engedélyek
Ehhez a parancshoz adatbázis-Rendszergazda engedélyek szükségesek. A materializált nézet létrehozója lesz a rendszergazdája.
Syntax
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName=
PropertyValue,
...)
] MaterializedViewNameon table
SourceTableName{
Lekérdezés}
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
PropertyName, PropertyValue | string |
A tulajdonságok listája név- és értékpárok formájában, a támogatott tulajdonságok listájából. | |
MaterializedViewName | string |
✔️ | A materializált nézet neve. A nézet neve nem ütközhet az ugyanabban az adatbázisban található tábla- vagy függvénynevekkel, és meg kell felelnie az azonosító elnevezési szabályainak. |
SourceTableName | string |
✔️ | Annak a forrástáblának a neve, amelyen a nézet definiálva van. |
Lekérdezés | string |
✔️ | A materializált nézet lekérdezésdefiníciója. További információ és korlátozások: Lekérdezési paraméter szakasz. |
Megjegyzés
Ha a materializált nézet már létezik:
- Ha a
ifnotexists
jelölő meg van adva, a rendszer figyelmen kívül hagyja a parancsot. Nincs módosítás, még akkor sem, ha az új definíció nem egyezik meg a meglévő definícióval. - Ha a
ifnotexists
jelölő nincs megadva, a rendszer hibát ad vissza. - Meglévő materializált nézet módosításához használja a .alter materialized-view parancsot.
Támogatott tulajdonságok
A PropertyName=
TulajdonságÉrték)
záradék az with
(
alábbi tulajdonságokat támogatja. Minden tulajdonság megadása nem kötelező.
Név | Típus | Description |
---|---|---|
visszatöltés | bool |
A nézetet a (SourceTable true ) összes rekordja alapján hozza létre, vagy mostantól (false ) hozza létre. Az alapértelmezett szint a false . További információ: Materializált nézet visszatöltése. |
effectiveDateTime | datetime |
Csak akkor releváns, ha a parancsot használja backfill . Ha be van állítva, a létrehozás csak a datetime után betöltött rekordokkal tölthető le. backfill a értéket is be kell állítani.true Ez a tulajdonság dátum/idő literálra számít; például: effectiveDateTime=datetime(2019-05-01) . |
updateExtentsCreationTime | bool |
Csak akkor releváns, ha a parancsot használja backfill . Ha a értékre true van állítva, akkor a bővítménylétrehozási idő a datetime group-by kulcs alapján van hozzárendelve a backfill folyamat során. További információ: Materializált nézet visszatöltése. |
visszatekintés | timespan |
Csak materializált nézetekre arg_max //arg_min take_any érvényes. Korlátozza az ismétlődések várható időtartamát. Ha például egy nézeten 6 órás visszatekintés van megadva arg_max , az újonnan betöltött rekordok és a meglévők közötti deduplikáció csak azokat a rekordokat veszi figyelembe, amelyeket legfeljebb 6 órával ezelőtt töltöttek be. A visszatekintés a következőhöz viszonyítva ingestion_time van: . A visszatekintési időszak helytelen meghatározása ismétlődő elemeket eredményezhet a materializált nézetben. Ha például egy adott kulcs rekordját 10 órával az adott kulcs rekordjának betöltése után betöltik, és a visszatekintés 6 órára van állítva, akkor a kulcs duplikált lesz a nézetben. A visszatekintési időszak mind a materializálási, mind a lekérdezési idő alatt érvényesül. |
autoUpdateSchema | bool |
A forrástábla módosításainak automatikus frissítése. Az alapértelmezett szint a false . Ez a beállítás csak típusnézetek arg_max(Timestamp, *) //arg_min(Timestamp, *) take_any(*) esetén érvényes (csak akkor, ha az oszlop argumentuma ).* Ha ez a beállítás értékre true van állítva, a forrástábla módosításai automatikusan megjelennek a materializált nézetben. |
dimensionTables | array | Dinamikus argumentum, amely dimenziótáblák tömböt tartalmaz a nézetben. Lásd: Lekérdezési paraméter. |
Mappa | string |
A materializált nézet mappája. |
docString | string |
A materializált nézetet dokumentáló sztring. |
allowMaterializedViewsWithoutRowLevelSecurity | bool |
Lehetővé teszi, hogy materializált nézetet hozzon létre egy táblán, amelyen engedélyezve van a sorszintű biztonsági szabályzat. |
Figyelmeztetés
- A rendszer automatikusan letiltja a materializált nézetet, ha a materializált nézet forrástáblájának módosítása vagy az adatok változása kompatibilitást eredményez a materializált nézet lekérdezése és a várt materializált nézetséma között.
- A hiba elkerülése érdekében a materializált nézet lekérdezésének determinisztikusnak kell lennie. A bag_unpack vagy kimutatás beépülő modul például nem determinisztikus sémát eredményez.
- Ha összesítést
arg_max(Timestamp, *)
használ, és haautoUpdateSchema
hamis, a forrástábla módosítása sémaeltérésekhez is vezethet. Ezt a hibát elkerülheti, ha a nézet lekérdezését a következőként definiálja:arg_max(Timestamp, Column1, Column2, ...)
, vagy aautoUpdateSchema
beállítással. - A használata
autoUpdateSchema
visszafordíthatatlan adatvesztéshez vezethet a forrástábla oszlopainak elvetésekor. - A materializált nézetek automatikus letiltásának monitorozása a MaterializedViewResult metrika használatával.
- Az inkompatibilitási problémák megoldása után explicit módon újra engedélyeznie kell a nézetet a materializált nézet engedélyezése paranccsal.
Materializált nézet létrehozása materializált nézeten keresztül
Materializált nézetet csak akkor hozhat létre egy másik materializált nézethez, ha a forrás materializált nézet take_any(*)
aggregáció (deduplikáció). További információ: Materialized view over materialized view and Examples (Materialized view over materialized view and Examples).
Szintaxis:
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName=
PropertyValue,
...)
] MaterializedViewNameon materialized-view
SourceMaterializedViewName{
Lekérdezés}
Paraméterek:
Név | Típus | Kötelező | Leírás |
---|---|---|---|
PropertyName, PropertyValue | string |
Tulajdonságok listája név- és értékpárok formájában a támogatott tulajdonságok listájából. | |
MaterializedViewName | string |
✔️ | A materializált nézet neve. A nézetnév nem ütközhet az ugyanabban az adatbázisban lévő tábla- vagy függvénynevekkel, és meg kell felelnie az azonosító elnevezési szabályainak. |
SourceMaterializedViewName | string |
✔️ | Annak a materializált forrásnézetnek a neve, amelyen a nézet definiálva van. |
Lekérdezés | string |
✔️ | A materializált nézet lekérdezésdefiníciója. |
Példák
Hozzon létre egy üres
arg_max
nézetet, amely csak a mostantól betöltött rekordokat fogja materializálni:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
Hozzon létre egy materializált nézetet a napi összesítésekhez a backfill beállítással a használatával
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 }
Materializált nézet létrehozása a és
effectiveDateTime
a használatávalbackfill
. A nézet csak a datetime rekordjai alapján jön létre..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 }
Hozzon létre egy materializált nézetet, amely 6 órás visszatekintés használatával deduplikálja a forrástáblát az
EventId
oszlop alapján. A rekordok deduplikációja csak az aktuális rekordok előtt 6 órával betöltött rekordokhoz lesznek deduplikálva..create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
Hozzon létre egy, az előző
DeduplicatedTable
materializált nézeten alapuló, leszámlázott materializált nézetet:.create materialized-view DailyUsage on materialized-view DeduplicatedTable { DeduplicatedTable | summarize count(), dcount(User) by Day=bin(Timestamp, 1d) }
A definíció további operátorokat is tartalmazhat a
summarize
utasítás előtt, amennyibensummarize
az utolsó:.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 }
Az alábbiakban egy dimenziótáblával összekapcsolt materializált nézeteket talál:
.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 }
Megjegyzések
Lekérdezési paraméter
A következő szabályok korlátozzák a materializált nézet Lekérdezés paraméterében használt lekérdezést:
A lekérdezésnek egyetlen ténytáblára kell hivatkoznia, amely a materializált nézet forrása. Egyetlen operátort
summarize
és egy vagy több aggregációs függvényt kell tartalmaznia, amelyeket egy vagy több csoport kifejezésekkel összesít. Azsummarize
operátornak mindig az utolsó operátornak kell lennie a lekérdezésben.A csak egyetlen
arg_max
//arg_min
take_any
összesítést tartalmazó materializált nézet jobban teljesíthet, mint az ezeket az összesítéseket és más összesítéseket (példáulavg
count
/dcount
/ ) tartalmazó materializált nézet. Ennek az az oka, hogy egyes optimalizálások csak az ilyen típusú materializált nézetek szempontjából relevánsak. Nem alkalmazhatók, ha a nézet vegyes aggregációs függvényeket tartalmaz (ahol a vegyes azt jelenti, hogy ugyanabban a nézetben és más összesítésekben isarg_max
//arg_min
take_any
szerepel).A lekérdezés nem tartalmazhat olyan operátorokat, amelyek függnek a függvénytől
now()
. A lekérdezésnek például nem szabad a következővel rendelkezniewhere Timestamp > ago(5d)
: . A materializált nézet adatmegőrzési szabályzatával korlátozhatja a nézet időtartamát.A materializált nézet lekérdezése nem támogatja a következő operátorokat:
sort
,top-nested
,top
, ,serialize
partition
.Az összetett aggregációk nem támogatottak a materializált nézet definíciójában. A helyett
SourceTableName | summarize Result=sum(Column1)/sum(Column2) by Id
például a következőként definiálja a materializált nézetet:SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id
. A lekérdezési idő megtekintése során futtassa a következőtMaterializedViewName | project Id, Result=a/b
: . A nézet szükséges kimenete, beleértve a számított oszlopot (a/b
) is, egy tárolt függvénybe foglalható. A tárolt függvény elérése a materializált nézet közvetlen elérése helyett.A fürtök közötti és az adatbázisközi lekérdezések nem támogatottak.
A external_table() és külső adatokra mutató hivatkozások nem támogatottak.
A materializált nézet lekérdezése nem tartalmazhat megszemélyesítést igénylő feliratokat. Pontosabban a megszemélyesítést használó lekérdezési csatlakozási beépülő modulok nem engedélyezettek.
A nézet forrástáblája mellett a lekérdezés egy vagy több dimenziótáblára is hivatkozhat. A dimenziótáblákat explicit módon ki kell hívni a nézet tulajdonságai között. Fontos megérteni a következő viselkedést, amikor dimenziótáblákkal csatlakozik:
A nézet forrástáblájában (a ténytáblában) lévő rekordok csak egyszer lesznek materializálva. Frissítések a dimenziótáblákra nincs hatással a ténytáblából már feldolgozott rekordokra.
A ténytábla és a dimenziótábla eltérő betöltési késése hatással lehet a nézet eredményeire.
Példa: A nézetdefiníció egy dimenziótáblával rendelkező belső illesztésből áll. A materializáláskor a dimenziórekordot nem töltötték be teljesen, de már betöltötték a ténytáblába. Ez a rekord el lesz távolítva a nézetből, és soha többé nem lesz feldolgozva.
Hasonlóképpen, ha az illesztés külső illesztés, a ténytábla rekordját a rendszer feldolgozza és hozzáadja a dimenziótábla oszlopainak null értékével való megtekintéshez. A nézethez már hozzáadott (null értékű) rekordokat a rendszer nem dolgozza fel újra. A dimenziótábla oszlopaiban lévő értékek null értékűek maradnak.
Támogatott összesítési függvények
A következő aggregációs függvények támogatottak:
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
Teljesítménnyel kapcsolatos tippek
Használjon dátum/idő csoportosítási kulcsot: Azok a materializált nézetek, amelyek a csoportosítási kulcsok egyikeként dátum/idő oszloppal rendelkeznek, hatékonyabbak, mint azok, amelyek nem. Ennek az az oka, hogy egyes optimalizálások csak akkor alkalmazhatók, ha van dátum/idő csoportosítási kulcs. Ha egy dátum/idő csoportosítási kulcs hozzáadása nem változtatja meg az összesítés szemantikáját, javasoljuk, hogy adja hozzá. Ezt csak akkor teheti meg, ha a datetime oszlop nem módosítható az egyes egyedi entitásokhoz.
Például a következő összesítésben:
SourceTable | summarize take_any(*) by EventId
Ha
EventId
mindig ugyanazzalTimestamp
az értékkel rendelkezik, és ezért a hozzáadásTimestamp
nem változtatja meg az összesítés szemantikáját, érdemesebb a nézetet a következőképpen definiálni:SourceTable | summarize take_any(*) by EventId, Timestamp
Tipp
A datetime group-by kulccsal érkező késői adatok negatív hatással lehetnek a materializált nézet teljesítményére. Tegyük fel például, hogy egy materializált nézet a csoportonkénti kulcsok egyikét használja
bin(Timestamp, 1d)
, és az adatok több kiugró értéke nagyon régiTimestamp
. Ezek a kiugró értékek negatív hatással lehetnek a materializált nézetre.Javasoljuk, hogy a materializált nézet lekérdezésében szűrje ki a kiugró rekordokat, vagy normalizálja ezeket a rekordokat az aktuális időpontra.
Visszatekintési időszak meghatározása: Ha alkalmazható a forgatókönyvre, a
lookback
tulajdonság hozzáadása jelentősen javíthatja a lekérdezési teljesítményt. Részletekért lásd: Támogatott tulajdonságok.Csoportosítási kulcsként gyakran használt oszlopok hozzáadása: A materializált nézetlekérdezések akkor lesznek optimalizálva, ha a materializált nézet egyik csoportosítási kulcsa szűri őket. Ha tudja, hogy a lekérdezési minta gyakran egy olyan oszlop alapján szűr, amely nem módosítható a materializált nézetben lévő egyedi entitás alapján, vegye fel a materializált nézet csoportosítási kulcsai közé.
Egy materializált nézet például egy
ResourceId
olyan érték alapján jelenik megarg_max
, amelyet gyakran szűr a .SubscriptionId
Feltételezve, hogy egyResourceId
érték mindig ugyanahhozSubscriptionId
az értékhez tartozik, adja meg a materializált nézet lekérdezését a következő módon:.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by SubscriptionId, ResourceId }
Az előző definíció előnyösebb a következőnél:
.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by ResourceId }
Szükség esetén használjon frissítési szabályzatokat: A materializált nézet átalakításokat, normalizálásokat és kereséseket tartalmazhat a dimenziótáblákban. Javasoljuk azonban, hogy ezeket a műveleteket helyezze át egy frissítési szabályzatba. Csak a materializált nézet összesítését hagyja meg.
Érdemes például a következő frissítési szabályzatot definiálni:
.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}]'
És definiálja a következő materializált nézetet:
.create materialized-view Usage on table Events { Target | summarize count() by ResourceId }
A másik lehetőség, hogy a frissítési szabályzatot a materializált nézetlekérdezés részeként bele kell venni, rosszabbul teljesíthet, ezért nem ajánlott:
.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 }
Tipp
Ha a legjobb lekérdezési időteljesítményre van szüksége, de el tudja viselni az adatkésést, használja a materialized_view() függvényt.
Materializált nézet visszatöltése
Ha a tulajdonság használatával backfill
hoz létre materializált nézetet, a materializált nézet a forrástáblában elérhető rekordok alapján jön létre. Vagy a rekordok egy részhalmaza alapján jön létre, ha a parancsot használja effectiveDateTime
.
A színfalak mögött a visszatöltési folyamat több kötegre osztja fel az adatokat, és több betöltési műveletet hajt végre a nézet visszatöltéséhez. A folyamat végrehajtása hosszabb időt vehet igénybe, ha a forrástáblában lévő rekordok száma nagy. A folyamat időtartama a fürt méretétől függ. A visszatöltés .show operations
előrehaladását a paranccsal követheti nyomon.
A rendszer újrapróbálja a visszatöltési folyamat részeként előforduló átmeneti hibákat. Ha az összes újrapróbálkozási művelet kimerült, a parancs sikertelen lesz, és a create parancs manuális újrafuttatását igényli.
Nem javasoljuk a visszatöltés használatát, ha a forrástábla rekordjainak száma meghaladja number-of-nodes X 200 million
(néha még kevesebb is, a lekérdezés összetettségétől függően). Másik lehetőségként a backfill by move extents (Áthelyezési mértékek) lehetőség is létezik.
A visszatöltési lehetőség használata nem támogatott a ritka elérésű gyorsítótárban lévő adatok esetében. Szükség esetén növelje a gyakori elérésű gyorsítótár időtartamát a nézet létrehozásához. Ehhez vertikális felskálázásra lehet szükség.
Ha hibákat tapasztal a nézet létrehozásakor, próbálja meg módosítani az alábbi tulajdonságokat:
MaxSourceRecordsForSingleIngest
: Alapértelmezés szerint az egyes betöltési műveletek forrásrekordjainak száma a visszatöltés során csomópontonként 2 millió. Ezt az alapértelmezett beállítást úgy módosíthatja, hogy ezt a tulajdonságot a kívánt számú rekordra állítja. (Az érték az egyes betöltési műveletek rekordjainak teljes száma.)Ennek az értéknek a csökkentése akkor lehet hasznos, ha a létrehozás meghiúsul a memóriakorlátokon vagy a lekérdezések időtúllépésén. Az érték növelése felgyorsíthatja a nézet létrehozását, feltéve, hogy a fürt az alapértelmezettnél több rekordon is képes végrehajtani az összesítési függvényt.
Concurrency
: A feltöltési folyamat részeként futó betöltési műveletek párhuzamosan futnak. Alapértelmezés szerint az egyidejűség a következőmin(number_of_nodes * 2, 5)
: . Ezt a tulajdonságot beállíthatja az egyidejűség növelésére vagy csökkentésére. Ezt az értéket csak akkor javasoljuk, ha a fürt processzorhasználata alacsony, mert a növekedés jelentősen befolyásolhatja a fürt processzorhasználatát.
A következő parancs például a materializált nézetet tölti ki a fájlból 2020-01-01
. Az egyes betöltési műveletek rekordjainak maximális száma 3 millió. A parancs a betöltési műveleteket a következő egyidejűségével hajtja 2
végre: .
.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)
}
Ha a materializált nézet dátum/idő csoportosítási kulcsot tartalmaz, a visszatöltési folyamat támogatja a dátum/idő oszlop alapján a mértéklétrehozási idő felülírását. Ez például akkor lehet hasznos, ha azt szeretné, hogy a régebbi rekordok a legutóbbiak előtt legyenek elvetve, mert a megőrzési szabályzat a létrehozási idő mértékén alapul. A updateExtentsCreationTime
tulajdonság csak akkor támogatott, ha a nézet tartalmaz egy datetime group-by kulcsot, amely a függvényt bin()
használja. A következő backfill például a csoportosítási kulcs alapján rendeli hozzá a Timestamp
létrehozási időt:
.create async materialized-view with (
backfill=true,
updateExtentsCreationTime=true
)
CustomerUsage on table T
{
T
| summarize count() by Customer, bin(Timestamp, 1d)
}
Visszatöltés áthelyezési mértékek szerint
Az áthelyezéssel történő visszatöltés lehetősége a materializált nézetet egy meglévő tábla alapján tölti ki, amely nem feltétlenül a materializált nézet forrástáblája. A visszatöltést úgy érheti el, hogy a megadott táblából a mögöttes materializált nézettáblába helyezi át a mértékeket . Ez a folyamat a következőket jelenti:
- A megadott tábla adatainak ugyanazzal a sémával kell rendelkezniük, mint a materializált nézetsémának.
- A megadott tábla rekordjait a rendszer a következőképpen helyezi át a nézetbe. A rendszer feltételezi, hogy a materializált nézet definíciója alapján deduplikált.
Ha például a materializált nézet a következő összesítéssel rendelkezik:
T | summarize arg_max(Timestamp, *) by EventId
Ezután az áthelyezési kiterjedés művelet forrástáblájában lévő rekordokat már le kell deduplikálnia a következővel EventID
: .
Mivel a művelet .move kiterjesztéseket használ, a rekordok el lesznek távolítva a megadott táblából a visszatöltés során (áthelyezve, nem másolva).
Az áthelyezési mértékek szerinti visszatöltés nem támogatott a materializált nézetekben támogatott összesítési függvények esetében. Sikertelen lesz az olyan aggregációk esetében, mint avg()
a , dcount()
amelyekben a nézetben tárolt mögöttes adatok eltérnek az aggregációtól.
A materializált nézet csak a megadott tábla alapján tölthető ki. A nézet forrástáblájában lévő rekordok materializálása alapértelmezés szerint a nézet létrehozási időpontjától kezdődik.
Ha a materializált nézet forrástáblája folyamatosan betölti az adatokat, a nézet áthelyezési mértékekkel történő létrehozása adatvesztést okozhat. Ennek az az oka, hogy a forrástáblába betöltött rekordok nem lesznek belefoglalva a materializált nézetbe a tábla visszatöltésre való előkészítésének és a nézet létrehozásának ideje közötti rövid idő alatt. A forgatókönyv kezeléséhez beállíthatja a source_ingestion_time_from
tulajdonságot a materializált nézet kezdési időpontjára a forrástáblában.
Használati esetek
Az áthelyezési mértékekkel történő visszatöltés lehetősége két fő forgatókönyvben lehet hasznos:
Ha már van olyan táblája, amely tartalmazza a materializált nézet deduplikált forrásadatait, és nincs szüksége ezekre a rekordokra ebben a táblában a nézet létrehozása után, mert csak a materializált nézetet használja.
Ha a materializált nézet forrástáblája nagyon nagy, és a nézet forrástábla alapján történő feltöltése a korábban említett korlátozások miatt nem működik megfelelően. Ebben az esetben a visszatöltési folyamatot saját maga vezényelheti egy ideiglenes táblába a lekérdezési parancsok és az egyik ajánlott vezénylési eszköz használatával. Ha az ideiglenes tábla tartalmazza a backfill összes rekordját, hozza létre a materializált nézetet a tábla alapján.
Példák:
Az alábbi példában a tábla
DeduplicatedTable
példányonkéntEventId
egyetlen rekordot tartalmaz, és a materializált nézet alapkonfigurációjaként fogjuk használni. Csak aT
nézetlétrehozási idő után betöltött rekordok lesznek belefoglalva a materializált nézetbe..create async materialized-view with (move_extents_from=DeduplicatedTable) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Ha a
effectiveDateTime
tulajdonságot a tulajdonsággal együtt adja meg, csak azokat amove_extents_from
mértékeketDeduplicatedTable
adja meg, amelyekMaxCreatedOn
értéke nagyobb, minteffectiveDateTime
a backfillben (áthelyezve a materializált nézetbe):.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 }
Az alábbi példa bemutatja, hogy a
source_ingestion_time_from
tulajdonság milyen módon használható az áthelyezési mértékekkel történő visszatöltés lehetőségében.source_ingestion_time_from
Mindkettőt használja, ésmove_extents_from
azt jelzi, hogy a materializált nézet két forrásból tölthető vissza:A
move_extents_from
táblázat:DeduplicatedTable
az alábbi példában. Ennek a táblának tartalmaznia kell az összes előzményadatot a visszatöltéshez. A tulajdonságoteffectiveDateTime
használhatja arra is, hogy csak azokat aDeduplicatedTable
mértékeket tartalmazza, amelyekMaxCreatedOn
értéke nagyobb, minteffectiveDateTime
.A materializált nézet forrástáblája:
T
a következő példában. A táblából való visszatöltés csak azokat a rekordokat tartalmazza, amelyek ingestion_time() értéke nagyobb, mintsource_ingestion_time_from
.A
source_ingestion_time_from
tulajdonság csak a lehetséges adatvesztés kezelésére használható a táblaDeduplicatedTable
() és a nézet létrehozásának időpontja közötti rövid idő alatt. Ne állítsa be ezt a tulajdonságot túl messzire a múltban. Ez jelentős késéssel indítaná el a materializált nézetet, amelyet nehéz lehet felzárkózni.
A következő példában feltételezzük, hogy az aktuális idő .
2020-01-01 03:00
A TáblaDeduplicatedTable
a deduplikált táblájaT
. Az összes előzményadatot tartalmazza, deduplikálva a következő időpontig2020-01-01 00:00
: . Acreate
parancs a materializált nézet áthelyezési kiterjedésekkel történő visszatöltésére használhatóDeduplicatedTable
. Acreate
parancs a óta betöltött2020-01-01
összes rekordotT
is tartalmazza..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 }
Materializált nézet létrehozásának megszakítása
Ha a visszatöltési lehetőséget használja, megszakíthatja a materializált nézet létrehozásának folyamatát. Ez a művelet akkor hasznos, ha a létrehozás túl sokáig tart, és le szeretné állítani, amíg fut.
Figyelmeztetés
A materializált nézet nem állítható vissza a parancs futtatása után.
A létrehozási folyamat nem szakítható meg azonnal. A cancel parancs a materializálás leállítását jelzi, a létrehozás pedig rendszeres időközönként ellenőrzi, hogy kérték-e a megszakítást. A mégse parancs legfeljebb 10 percet vár a materializált nézetlétrehozási folyamat megszakításáig, és a lemondás sikeressége esetén jelentést készít.
Még akkor is, ha a megszakítás 10 percen belül nem sikerül, és a megszakítási parancs hibát jelez, a materializált nézet valószínűleg a létrehozási folyamat későbbi szakaszában megszakítja magát. A .show operations
parancs jelzi, hogy a műveletet megszakították-e.
Ha a művelet a parancs kiadásakor .cancel operation
már nincs folyamatban, a parancs hibát jelez.
Syntax
.cancel operation
operationId
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
operationId |
guid |
✔️ | A parancs által .create async materialized-view visszaadott műveletazonosító. |
Kimenet
Név | Típus | Description |
---|---|---|
OperationId | guid |
A parancs műveleti azonosítója .create materialized-view . |
Művelet | string |
A művelet típusa. |
StartedOn | datetime |
A létrehozási művelet kezdő időpontja. |
CancellationState | string |
Az egyik: Canceled successfully (a létrehozás megszakadt), Cancellation failed (várakozás a lemondás időtúllépésére), Unknown (a nézet létrehozása már nem fut, de ez a művelet nem szüntette meg). |
ReasonPhrase | string |
Az ok, amiért a lemondás nem sikerült. |
Példák
.cancel operation c4b29441-4873-4e36-8310-c631c35c916e
Műveletazonosító | Művelet | StartedOn | CancellationState | ReasonPhrase |
---|---|---|---|---|
c4b29441-4873-4e36-8310-c631c35c916e |
MaterializedViewCreateOrAlter |
2020-05-08 19:45:03.9184142 |
Canceled successfully |
Ha a lemondás 10 percen belül nem fejeződött be, CancellationState
a hiba jelenik meg. A létrehozás ezután megszakítható.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: