.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 tableSourceTableName{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 (SourceTabletrue) ö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. backfilla é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 truevan á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_mintake_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_timevan: . 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 truevan á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 ha autoUpdateSchema 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 a autoUpdateSchema 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-viewSourceMaterializedViewName{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 effectiveDateTimea 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, amennyiben summarize 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. Az summarize operátornak mindig az utolsó operátornak kell lennie a lekérdezésben.

    A csak egyetlen arg_max//arg_mintake_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áulavgcount/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 is arg_max//arg_mintake_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 rendelkeznie where 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, , serializepartition.

  • 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 Idpé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őt MaterializedViewName | 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:

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 ugyanazzal Timestamp az értékkel rendelkezik, és ezért a hozzáadás Timestamp 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égi Timestamp . 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 egy ResourceId érték mindig ugyanahhoz SubscriptionId 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 2vé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ént EventId egyetlen rekordot tartalmaz, és a materializált nézet alapkonfigurációjaként fogjuk használni. Csak a T 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 a move_extents_from mértékeket DeduplicatedTable adja meg, amelyek MaxCreatedOn értéke nagyobb, mint effectiveDateTime 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, és move_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ágot effectiveDateTime használhatja arra is, hogy csak azokat a DeduplicatedTable mértékeket tartalmazza, amelyek MaxCreatedOn értéke nagyobb, mint effectiveDateTime.

    • 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, mint source_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ábla DeduplicatedTable a deduplikált táblája T. Az összes előzményadatot tartalmazza, deduplikálva a következő időpontig 2020-01-01 00:00: . A create parancs a materializált nézet áthelyezési kiterjedésekkel történő visszatöltésére használható DeduplicatedTable . A create parancs a óta betöltött 2020-01-01összes rekordot T 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 operationoperationId

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ó.