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

Szolgáltatások váltása a Verzió legördülő listával. További információ a navigációról.
A következőre vonatkozik: ✅ Microsoft Fabric ✅ Azure Data Explorer

A frissítési szabályzatok olyan automatizálási mechanizmusok, amelyek akkor aktiválódnak, amikor ú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 egy céltáblába menti az eredményt. Egyetlen táblán több frissítési szabályzat is definiálható, így különböző átalakításokat végezhet, és egyszerre több táblába mentheti az adatokat. 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 szabadszöveges oszlopként formázott adatokat tartalmazhatnak. A céltábla tartalmazhat meghatározott nyomkövetési vonalakat, amelyek jól strukturált sémát hoznak létre a forrástábla szabadszöveges adatainak átalakításából a elemzési operátorral. További információkért gyakori forgatókönyveket.

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, amikor adatokat adnak hozzá a második forrástáblához. Az aktiválásuk után a rendszer átalakított adatokat ad hozzá a két céltáblához.

diagram a frissítési szabályzat áttekintését mutatja be.

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

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

Jegyzet

  • 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 meg kell egyeznie az oszloptípusokban és a sorrendben.
  • A frissítési szabályzat függvény hivatkozhat más adatbázisok tábláira. Ehhez a frissítési szabályzatot egy ManagedIdentity tulajdonsággal kell definiálni, a felügyelt identitásnak pedig viewerszerepkörrel kell rendelkeznie a hivatkozott adatbázisokban. A formázott adatok betöltése javítja a teljesítményt, és a CSV-t előnyben részesíti a jól definiált formátum miatt. Előfordulhat azonban, hogy nincs szabályozva az adatok formátuma, vagy például úgy szeretné bővíteni a betöltött adatokat, hogy a rekordokat egy statikus dimenziótáblával összekapcsolja az adatbázisban.

Jegyzet

  • 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 meg kell egyeznie az oszloptípusokban és a sorrendben.

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

Ha a frissítési szabályzat a céltáblán van definiálva, több lekérdezés is futtatható egy 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 a következő kivétellel:
      • A lekérdezés egy gyorsított külső táblára hivatkozhat a external_table() függvény használatával, feltéve, hogy:
        • A külső tábla egy lekérdezésgyorsítási szabályzattal rendelkezik, Hot amely az összes adatot lefedő időszakkal rendelkezik (jelenleg Hot>= 100 év).
        • A frissítési szabályzat tulajdonsággal ManagedIdentity van konfigurálva, ha a külső tábla megszemélyesítési hitelesítést használ.
    • Nem tud feliratokat készíteni (beépülő modullal).
  • 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 streamelési korlátozásokcímű témakörben talál.

  • A frissítési szabályzat lekérdezésének nem szabad olyan materializált nézetre hivatkoznia, amelynek lekérdezése a frissítési szabályzat céltábláját használja. Ha így tesz, az váratlan eredményeket eredményezhet.

  • A szabályzattal kapcsolatos lekérdezés képes meghívni a tárolt függvényeket, de:

    • Nem tud eseményházközi lekérdezéseket végrehajtani.
    • Nem fér hozzá külső adatokhoz vagy külső táblákhoz a következő kivétellel:
    • Nem tud feliratokat készíteni (beépülő modullal).
  • 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.

  • Alapértelmezés szerint a Streambetöltési szabályzat engedélyezve van az Eventhouse összes táblájában. Ha a join operátorral szeretne függvényeket használni egy frissítési szabályzatban, a streamelési betöltési szabályzatot le kell tiltani. Tiltsa le a .altertableTableNamepolicystreamingingestionPolicyObject parancsot.

  • Az operátort join tartalmazó kaszkádolt frissítési szabályzatok esetében le kell tiltania a streambetöltést az összes felsőbb rétegbeli táblában. Fontolja meg például a kaszkádolt frissítési szabályzatokat, amelyekben a Table1 frissíti a Table2, a Table2 a Table3 és a Table3 frissítéseket. Ha a Table4 frissítési szabályzata tartalmaz csatlakozást, le kell tiltania a streambetöltést a Table1, a Table2 és a Table3 táblában.

  • A frissítési szabályzat lekérdezésének nem szabad olyan materializált nézetre hivatkoznia, amelynek lekérdezése a frissítési szabályzat céltábláját használja. Ha így tesz, az váratlan eredményeket eredményezhet.

Figyelmeztetés

A helytelen lekérdezések megakadályozhatják az adatok forrástáblába való betöltését. 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 helytelen lekérdezések akadályozhatják meg 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 fontos, hogy minden módosítást körültekintően hajtson végre annak biztosítása érdekében, hogy a frissítési szabályzat érintetlen maradjon.

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

  • Ne használja a tábla minősített nevét. Ehelyett használja a TableName.

  • Ne használjon database("<DatabaseName>").TableName vagy cluster("<ClusterName>").database("<DatabaseName>").TableName.

  • Ne használja a tábla minősített nevét. Ehelyett használja a TableName.

  • Ne használjon database("<DatabaseName>").TableName vagy cluster("<EventhouseName>").database("<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.

Ingatlan Típus Leírás
IsEnabled bool Állapotok, ha a frissítési szabályzat igaz – engedélyezve vagy hamis – le van tiltva
Forrás string A frissítési szabályzat meghívását kiváltó tábla neve.
SourceIsWildCard bool Ha igaz, a Source tulajdonság lehet helyettesítő karakterminta. Lásd: Szabályzat frissítése a forrástábla helyettesítő karaktermintájával
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 hatókörcímkék és létrehozási idő, érvényesek-e a céltáblára.
ManagedIdentity 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 system fenntartott 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, az engedélyezett sorszintű biztonsági szabályzattal rendelkező táblákra vagy a megszemélyesítési hitelesítést használó gyorsított külső táblákra hivatkozik. További információ: Felügyelt identitás használata frissítési szabályzat futtatásához.
Ingatlan Típus Leírás
IsEnabled bool Állapotok, ha a frissítési szabályzat igaz – engedélyezve vagy hamis – le van tiltva
Forrás string A frissítési szabályzat meghívását kiváltó tábla neve
SourceIsWildCard bool Ha igaz, a Source tulajdonság lehet helyettesítő karakterminta.
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 hatókörcímkék és létrehozási idő, érvényesek-e a céltáblára.
OwnerPrincipalDetails object Rendszer által kitöltött, írásvédett tulajdonság. A frissítési szabályzatot létrehozó vagy módosító felhasználó fő adatait tartalmazza, amely akkor használható engedélyezésre, ha a frissítési szabályzat lekérdezése külső táblákra hivatkozik. Ezt a tulajdonságot a rendszer automatikusan beállítja, és manuálisan nem módosítható.

Jegyzet

Éles rendszerekben állítsa be a IsTransactional:igaz, hogy a céltábla ne veszítse el az adatokat átmeneti hibák esetén.

Jegyzet

A kaszkádolt frissítések engedélyezettek, például az A táblából a B táblából a C táblába. Ha azonban a frissítési szabályzatok körkörös módon 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 szabályzatkezelési parancsok frissítéséhez a következők tartoznak:

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, amikor az adatokat betöltik vagy áthelyezik egy forrástáblába, vagy a mértékek egy forrástáblában jönnek létre. Ezek a műveletek az alábbi parancsok bármelyikével elvégezhetők:

Figyelmeztetés

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

Szabályzat frissítése a forrástábla helyettesítő karaktermintájával

A frissítési szabályzat támogatja a több forrástáblából való betöltést, amelyek ugyanazt a mintát használják, miközben ugyanazt a lekérdezést használják, mint a frissítési szabályzat lekérdezése. Ez akkor hasznos, ha több forrástáblával rendelkezik, amelyek általában ugyanazt a sémát (vagy egy közös sémát használó oszlopok egy részhalmazát) használják, és a betöltést egyetlen céltáblába szeretné aktiválni, amikor valamelyik táblát betölti. Ebben az esetben ahelyett, hogy több frissítési szabályzatot határoznál meg, mindegyik egyetlen forrástáblához, egyetlen frissítési szabályzatot is megadhat helyettesítő karakterrel Source. A Query frissítési szabályzatnak meg kell felelnie a mintának megfelelő összes forrástáblának. A forrástáblára a frissítési szabályzat lekérdezésében való hivatkozáshoz használhat egy speciális, névvel ellátott $source_tableszimbólumot. Lásd a példa a helyettesítő kártya frissítési szabályzatát.

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

Miután betöltötte az adatokat a céltáblába, tetszés szerint eltávolíthatja azokat a forrástáblából. Állítson be 0sec (vagy 00:00:00) helyreállítható törlési időtartamot a forrástábla adatmegőrzési szabályzatában, a frissítési szabályzatot pedig tranzakcióské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árolóban 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 mértékben csökkentik a háttér-ápolási műveleteket.

Jegyzet

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

A teljesítményre gyakorolt hatás

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

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

A .show querieshasználatával é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
  • A Query tulajdonság beállítása egy MyFunction() nevű függvény meghívására
// '_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

Tranzakciós beállítások

A frissítési szabályzat IsTransactional beállítás határozza meg, hogy a frissítési szabályzat tranzakciós-e, és hatással lehet-e a szabályzatfrissítés viselkedésére az alábbiak szerint:

  • IsTransactional:false: Ha az érték az alapértelmezett értékre van állítva, hamis, a frissítési szabályzat nem garantálja a forrás- és a céltábla adatai közötti konzisztenciát. Ha egy frissítési szabályzat meghiúsul, az adatok csak a forrástáblába kerülnek, a céltáblába nem. Ebben a forgatókönyvben a betöltési művelet sikeres.
  • : Ha az érték igazvan beállítva, a beállítás garantálja a forrás- és a céltáblák adatai közötti konzisztenciát. Ha egy frissítési szabályzat meghiúsul, az adatok nem lesznek betöltve a forrás- vagy céltáblába. Ebben a forgatókönyvben a betöltési művelet sikertelen.

Hibák kezelése

Ha a szabályzatfrissítések sikertelenek, a rendszer másképpen kezeli őket attól függően, hogy a IsTransactional beállítás true vagy false. A frissítési szabályzat hibáinak gyakori okai a következők:

  • A lekérdezés kimeneti sémája és a céltábla közötti eltérés.
  • Bármilyen lekérdezési hiba.

A szabályzatfrissítési hibákat a .show ingestion failures parancs a következő paranccsal tekintheti meg: Minden más esetben manuálisan is próbálkozhat a betöltéssel.

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

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

A frissítési szabályzat beállításaival kinyerheti, átalakíthatja, 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 betöltése történik.
  • 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 a létrehozott függvény meghívására:

    .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ábla megőrzési szabályzatát, hogy az SoftDeletePeriod0s legyen.

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

Példa a helyettesítő kártya frissítési szabályzatára

Az alábbi példa egy frissítési szabályzatot hoz létre egyetlen bejegyzéssel a táblában TargetTable. A szabályzat az összes olyan táblára hivatkozik, amely megfelel a mintának SourceTable* . A mintának megfelelő táblákba (a helyi adatbázisban) történő betöltések aktiválják a frissítési szabályzatot, és a frissítési szabályzat lekérdezése alapján betöltik az adatokat TargetTable.

  1. Hozzon létre két forrástáblát:

    .create table SourceTable1(Id:long, Value:string)
    
    .create table SourceTable2(Id:long, Value:string)
    
  2. Hozza létre a céltáblát:

    .create table TargetTable(Id:long, Value:string, Source:string)
    
  3. Hozzon létre egy függvényt, amely a Query frissítési szabályzatot fogja szolgálni. A függvény a $source_table szimbólum használatával hivatkozik a Source frissítési szabályzatra. Az ellenőrzés kihagyására használható skipValidation=true a létrehozási függvény során, mivel $source_table ez csak a frissítési szabályzat végrehajtása során ismert. A függvény érvényesítése a következő lépésben történik a frissítési szabályzat módosításakor.

    .create function with(skipValidation=true) IngestToTarget()
    {
        $source_table 
        | parse Value with "I'm from table " Source
        | project Id, Value, Source
    }
    
  4. Hozza létre a frissítési szabályzatot a következőn TargetTable: . A szabályzat az összes olyan táblára hivatkozik, amely megfelel a mintának SourceTable* .

        .alter table TargetTable policy update
        ```[{ 
                "IsEnabled": true, 
                "Source": "SourceTable*", 
                "SourceIsWildCard" : true,
                "Query": "IngestToTarget()",
                "IsTransactional": true,
                "PropagateIngestionProperties": true
        }]```
    
    
  5. Betöltés forrástáblákba. Mindkét betöltés aktiválja a frissítési szabályzatot:

    .set-or-append SourceTable1 <| 
        datatable (Id:long, Value:string)
        [
            1, "I'm from table SourceTable1",
            2, "I'm from table SourceTable1"
        ]
    
    .set-or-append SourceTable2 <| 
        datatable (Id:long, Value:string)
        [
            3, "I'm from table SourceTable2",
            4, "I'm from table SourceTable2"
        ]
    
  6. Lekérdezés TargetTable:

     TargetTable
    
    Azonosító Érték Forrás
    1 A SourceTable1 táblából származom SourceTable1
    2 A SourceTable1 táblából származom SourceTable1
    3 A SourceTable2 táblából származom SourceTable2
    4 A SourceTable2 táblából származom SourceTable2