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.
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").TableName
a 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 IsTransactional
annak 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:
.show table *TableName* policy update
egy tábla aktuális frissítési szabályzatát jeleníti meg..alter table *TableName* policy update
egy tábla aktuális frissítési szabályzatát határozza meg..alter-merge table *TableName* policy update
hozzáfűzi a definíciókat egy tábla aktuális frissítési szabályzatához..delete table *TableName* policy update
törli egy tábla aktuális frissítési szabályzatát.
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:
- .ingest (lekérés)
- .ingest (beágyazott)
- .set | .append | .set-or-append | .set-or-replace
- .move extents
- .replace extents
- A
PropagateIngestionProperties
parancs csak a betöltési műveletekben lép érvénybe. Ha a frissítési szabályzat egy.move extents
vagy.replace extents
parancs részeként aktiválódik, ennek a beállításnak nincs hatása.
- A
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áraMyFunction()
// '_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:
false
az 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 failures
meg.
.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:
false
van á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:
true
van á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
vagyDataImporterMaximumRetryAttempts
- Alapértelmezés szerint a
DataImporterMaximumRetryPeriod
beállítás két nap, ésDataImporterMaximumRetryAttempts
10 - 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.
Hozzuk létre a forrástáblát:
.create table MySourceTable (OriginalRecord:string)
Ezután hozza létre a céltáblát:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
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 }
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}]'
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
Kapcsolódó tartalom
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: