Frissítési szabályzat áttekintése

A frissítési szabályzatok automatizálási mechanizmusok, amelyek akkor aktiválódnak, ha új adatokat írnak egy táblába. Kiküszöbölik a speciális vezénylés szükségességét egy lekérdezés futtatásával, amely átalakítja a betöltött adatokat, és az eredményt egy céltáblába menti. Egyetlen táblán több frissítési szabályzat is definiálható, amelyek lehetővé teszik a különböző átalakításokat és az adatok egyidejű mentését több táblába. A céltáblák eltérő sémával, adatmegőrzési szabályzattal és más szabályzatokkal rendelkezhetnek a forrástáblától.

A nagy sebességű nyomkövetési forrástáblák például tartalmazhatnak szabad szöveges oszlopként formázott adatokat. A céltábla tartalmazhat adott nyomkövetési vonalakat, amelyek jól strukturált sémát hoznak létre a forrástábla szabad szöveges adatainak átalakításával az elemzési operátor használatával. További információ: gyakori forgatókönyvek.

Az alábbi ábra egy frissítési szabályzat magas szintű nézetét ábrázolja. Két frissítési szabályzatot jelenít meg, amelyek akkor aktiválódnak, ha a második forrástáblához hozzáadott adatok átalakított adatokat adnak hozzá a két céltáblához.

Az ábrán a frissítési szabályzat áttekintése látható.

A frissítési szabályzatokra ugyanazok a korlátozások és ajánlott eljárások vonatkoznak, mint a rendszeres betöltés. A szabályzat a fürt méretének megfelelően skálázható fel, és hatékonyabb a tömeges betöltés kezelésekor.

Megjegyzés

  • A forrás- és céltáblának ugyanabban az adatbázisban kell lennie.
  • A frissítési házirendfüggvény sémájának és a céltábla sémájának egyeznie kell az oszlopnevükben, a típusukban és a sorrendjükben.

A formázott adatok betöltése javítja a teljesítményt, és a CSV-t előnyben részesítik a jól definiált formátum miatt. Néha azonban nincs szabályozva az adatok formátuma, vagy a betöltött adatok bővítésére van szükség, például úgy, hogy a rekordokat egy statikus dimenziótáblával összekapcsolja az adatbázisban.

Szabályzat lekérdezésének frissítése

Ha a frissítési szabályzat definiálva van a céltáblán, több lekérdezés is futtatható a forrástáblába betöltött adatokon. Ha több frissítési szabályzat is létezik, a végrehajtás sorrendje nem feltétlenül ismert.

Lekérdezési korlátozások

  • A szabályzattal kapcsolatos lekérdezés képes meghívni a tárolt függvényeket, de:
    • Nem tud fürtök közötti lekérdezéseket végrehajtani.
    • Nem fér hozzá külső adatokhoz vagy külső táblákhoz.
    • Nem tud feliratokat készíteni (beépülő modul használatával).
  • A lekérdezés nem rendelkezik olvasási hozzáféréssel azokhoz a táblákhoz, amelyeken engedélyezve van a RestrictedViewAccess szabályzat .
  • A streambetöltés frissítési szabályzatának korlátozásait a streamelési betöltési korlátozások című cikkben tekintheti meg.

Figyelmeztetés

A helytelen lekérdezések megakadályozhatják az adatbetöltést a forrástáblába. Fontos megjegyezni, hogy a korlátozások, valamint a lekérdezési eredmények és a forrás- és céltáblák sémája közötti kompatibilitás miatt a helytelen lekérdezések megakadályozhatják az adatok forrástáblába való betöltését.

Ezek a korlátozások a szabályzat létrehozása és végrehajtása során lesznek érvényesítve, de nem akkor, ha a lekérdezés által esetleg hivatkozott tetszőleges tárolt függvények frissülnek. Ezért rendkívül fontos, hogy körültekintően végezze el a módosításokat, hogy a frissítési szabályzat sértetlen maradjon.

Amikor a táblára hivatkozik Source a szabályzat vagy a Query rész által Query hivatkozott függvényekben:

  • Ne használja a tábla minősített nevét. Ehelyett használja a következőt TableName: .
  • Ne használja a vagy cluster("ClusterName").database("DatabaseName").TableNamea parancsotdatabase("DatabaseName").TableName.

A frissítési szabályzat objektuma

A táblákhoz nulla vagy több frissítési szabályzatobjektum társítható. Minden ilyen objektum JSON-tulajdonságcsomagként jelenik meg, a következő tulajdonságokkal.

Tulajdonság Típus Description
IsEnabled bool Állapotok, ha a frissítési szabályzat igaz – engedélyezve vagy hamis – letiltva
Forrás string A frissítési szabályzat meghívását kiváltó tábla neve
Lekérdezés string A frissítés adatainak előállítására szolgáló lekérdezés
IsTransactional bool Azt jelzi, hogy a frissítési szabályzat tranzakciós-e vagy sem, az alapértelmezett érték hamis. Ha a szabályzat tranzakciós, és a frissítési szabályzat meghiúsul, a forrástábla nem frissül.
PropagálásIngestionProperties bool Azt jelzi, hogy a forrástáblába való betöltés során megadott tulajdonságok, például a hatókörcímkék és a létrehozási idő érvényesek-e a céltáblára.
Felügyelt identitás string A felügyelt identitás, amelynek nevében a frissítési szabályzat fut. A felügyelt identitás lehet objektumazonosító vagy fenntartott system szó. A frissítési szabályzatot felügyelt identitással kell konfigurálni, ha a lekérdezés más adatbázisok tábláira vagy engedélyezett sorszintű biztonsági szabályzattal rendelkező táblákra hivatkozik. További információ: Felügyelt identitás használata frissítési szabályzat futtatásához.

Megjegyzés

Éles rendszerekben állítsa a :true értéket IsTransactionalannak biztosítására, hogy a céltábla ne veszítsen el adatokat átmeneti hibák esetén.

Megjegyzés

Kaszkádolt frissítések engedélyezettek, például az A táblából a B táblába, a C táblába. Ha azonban a frissítési szabályzatok körkörösen vannak definiálva, a rendszer futásidőben észleli, és a frissítési lánc megszakad. Az adatok csak egyszer kerülnek be a lánc egyes tábláiba.

Felügyeleti parancsok

A frissítési szabályzatkezelési parancsok közé tartoznak a következők:

A frissítési szabályzat a betöltés után indul el

A frissítési szabályzatok akkor lépnek érvénybe, ha az adatokat betöltik vagy áthelyezik egy forrástáblába, vagy a forrástáblában a mértékeket a következő parancsok bármelyikével hozza létre:

Figyelmeztetés

Ha a frissítési szabályzatot egy .set-or-replace parancs részeként hívja meg, a származtatott táblákban lévő adatok alapértelmezés szerint ugyanúgy lesznek lecserélve, mint a forrástáblában. A parancs meghívása esetén a frissítési szabályzattal rendelkező összes táblában elveszhetnek az replace adatok. Fontolja meg inkább a használatát .set-or-append .

Adatok eltávolítása a forrástáblából

Miután betöltötte az adatokat a céltáblába, igény szerint eltávolíthatja azokat a forrástáblából. Állítson be helyreállítható törlési időtartamot 0sec (vagy 00:00:00) a forrástábla adatmegőrzési szabályzatában, a frissítési szabályzatot pedig tranzakciós értékként. A következő feltételek érvényesek:

  • A forrásadatok nem kérdezhetők le a forrástáblából
  • A forrásadatok nem maradnak tartós tárban a betöltési művelet részeként
  • A működési teljesítmény javul. A betöltést követő erőforrások a forrástáblában megadott mértékben csökkentik a háttérbeli karcsúsítási műveleteket.

Megjegyzés

Ha a forrástábla helyreállítható törlési időszaka 0sec (vagy 00:00:00), a táblára hivatkozó frissítési szabályzatnak tranzakciósnak kell lennie.

Teljesítményre gyakorolt hatás

A frissítési szabályzatok hatással lehetnek a fürt teljesítményére, és az adatbetöltés a céltáblák számával megszorozva jelenik meg. Fontos, hogy optimalizálja a szabályzattal kapcsolatos lekérdezést. A frissítési szabályzat teljesítményre gyakorolt hatását tesztelheti úgy, hogy a szabályzatot a már meglévő mértékben, a szabályzat létrehozása vagy módosítása előtt, vagy a lekérdezéshez használt függvényre invesztálja.

Erőforrás-használat kiértékelése

A használatával .show queriesértékelje ki az erőforrás-használatot (CPU, memória stb.) a következő paraméterekkel:

  • Állítsa be a Source tulajdonságot, a forrástábla nevét, MySourceTable
  • Állítsa be a tulajdonságot Query egy nevű függvény meghívására MyFunction()
// '_extentId' is the ID of a recently created extent, that likely hasn't been merged yet.
let _extentId = toscalar(
    MySourceTable
    | project ExtentId = extent_id(), IngestionTime = ingestion_time()
    | where IngestionTime > ago(10m)
    | top 1 by IngestionTime desc
    | project ExtentId
);
// This scopes the source table to the single recent extent.
let MySourceTable =
    MySourceTable
    | where ingestion_time() > ago(10m) and extent_id() == _extentId;
// This invokes the function in the update policy (that internally references `MySourceTable`).
MyFunction

Hibák

Az alapértelmezett beállítással IsTransactional:falseaz adatok akkor is betölthetők a forrástáblába, ha a szabályzat nem fut.

A beállítás IsTransactional:true garantálja a forrás és a céltábla adatai közötti konzisztenciát. Ha azonban a szabályzat feltételei nem teljesülnek, az adatok nem lesznek betöltve a forrástáblába. A feltételektől függően előfordulhat, hogy az adatok a forrástáblába kerülnek, de nem a céltáblába. Ha azonban a szabályzat helytelenül van definiálva, vagy sémaeltérés van, az adatok nem kerülnek be a forrás- vagy céltáblába. A lekérdezés kimeneti sémája és a céltábla közötti eltérést például az okozhatja, hogy elvet egy oszlopot a céltáblából.

A hibák az paranccsal tekinthetők .show ingestion failuresmeg.

.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true

A hibák kezelése

Nem tranzakciós szabályzat

Ha a értékre IsTransactional:falsevan állítva, a rendszer figyelmen kívül hagyja a szabályzat futtatásának sikertelenségét. A betöltés nem lesz automatikusan újrapróbálkozás. Manuálisan újrapróbálhatja a betöltést.

Tranzakciós szabályzat

Ha a értékre IsTransactional:truevan állítva, ha a betöltési módszer azpull, a adatkezelés szolgáltatás érintett, és a betöltés automatikusan újrapróbálkozásra kerül az alábbi feltételek szerint:

  • Az újrapróbálkozás addig történik, amíg a következő konfigurálható korlátbeállítások valamelyike nem teljesül: DataImporterMaximumRetryPeriod vagy DataImporterMaximumRetryAttempts
  • Alapértelmezés szerint a DataImporterMaximumRetryPeriod beállítás két nap, és DataImporterMaximumRetryAttempts10
  • A visszalépési időszak 2 perccel kezdődik, és duplázódik. Tehát a várakozás 2 perccel kezdődik, majd 4 percre, 8 percre, 16 percre és így tovább növekszik.

Minden más esetben manuálisan is próbálkozhat a betöltéssel.

Példa kinyerésre, átalakításra, betöltésre

A frissítési szabályzat beállításaival kinyerheti, átalakíthatja és betöltheti (ETL).

Ebben a példában egy egyszerű függvénnyel rendelkező frissítési szabályzatot használjon az ETL végrehajtásához. Először két táblát hozunk létre:

  • A forrástábla – Egyetlen sztring típusú oszlopot tartalmaz, amelybe az adatok be lesznek betöltve.
  • A céltábla – A kívánt sémát tartalmazza. A frissítési szabályzat ezen a táblán van definiálva.
  1. Hozzuk létre a forrástáblát:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Ezután hozza létre a céltáblát:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Ezután hozzon létre egy függvényt az adatok kinyeréséhez:

    .create function
     with (docstring = 'Parses raw records into strongly-typed columns', folder = 'UpdatePolicyFunctions')
         ExtractMyLogs()
        {
        MySourceTable
        | parse OriginalRecord with "[" Timestamp:datetime "] [ThreadId:" ThreadId:int "] [ProcessId:" ProcessId:int "] TimeSinceStartup: " TimeSinceStartup:timespan " Message: " Message:string
        | project-away OriginalRecord
    }
    
  4. Most állítsa be a frissítési szabályzatot úgy, hogy meghívja a létrehozott függvényt:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Ha ki szeretné üríteni a forrástáblát az adatok céltáblába való betöltése után, adja meg a forrástáblán lévő adatmegőrzési szabályzatot, hogy a 0s legyen annak.SoftDeletePeriod

     .alter-merge table MySourceTable policy retention softdelete = 0s