Sdílet prostřednictvím


Přehled aktualizací zásad

Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
Platí pro: ✅ Microsoft Fabric ✅ Azure Data Explorer

Zásady aktualizace jsou mechanismy automatizace aktivované při zápisu nových dat do tabulky. Eliminují nutnost zvláštní orchestrace spuštěním dotazu transformovat přijatá data a uložit výsledek do cílové tabulky. V jedné tabulce je možné definovat více zásad aktualizace, což umožňuje různé transformace a ukládání dat do více tabulek současně. Cílové tabulky můžou mít jiné schéma, zásady uchovávání informací a další zásady ze zdrojové tabulky.

Například zdrojová tabulka s vysokou mírou trasování může obsahovat data formátovaná jako sloupec volného textu. Cílová tabulka může obsahovat konkrétní trasovací čáry s dobře strukturovaným schématem vygenerovaným z transformace volných textových dat zdrojové tabulky pomocí operátoru analýzy. Další informace najdete v běžných scénářích.

Následující diagram znázorňuje základní zobrazení zásad aktualizace. Zobrazuje dvě zásady aktualizace, které se aktivují při přidání dat do druhé zdrojové tabulky. Po aktivaci se transformovaná data přidají do dvou cílových tabulek.

Diagram znázorňuje přehled zásad aktualizace.

Zásady aktualizace podléhají stejným omezením a osvědčeným postupům jako pravidelný příjem dat. Zásady se škálují podle velikosti clusteru a jsou efektivnější při zpracování hromadného příjmu dat.

Zásady aktualizace podléhají stejným omezením a osvědčeným postupům jako pravidelný příjem dat. Zásady se škálují podle velikosti eventhouse a jsou efektivnější při zpracování hromadného příjmu dat.

Poznámka:

  • Zdrojová a cílová tabulka musí být ve stejné databázi.
  • Schéma funkce zásad aktualizace a schéma cílové tabulky se musí shodovat s jejich typy sloupců a pořadím.
  • Funkce zásad aktualizace může odkazovat na tabulky v jiných databázích. K tomu musí být zásada aktualizace definována s ManagedIdentity vlastností a spravovaná identita musí mít viewerroli v odkazovaných databázích. Ingestování formátovaných dat zlepšuje výkon a sdílený svazek clusteru se upřednostňuje kvůli dobře definovanému formátu. Někdy ale nemáte žádnou kontrolu nad formátem dat nebo chcete rozšířit ingestované data, například spojením záznamů s tabulkou statických dimenzí v databázi.

Poznámka:

  • Zdrojová a cílová tabulka musí být ve stejné databázi.
  • Schéma funkce zásad aktualizace a schéma cílové tabulky se musí shodovat s jejich typy sloupců a pořadím.

Aktualizace dotazu zásad

Pokud je zásada aktualizace definovaná v cílové tabulce, může několik dotazů běžet na přijatých datech do zdrojové tabulky. Pokud existuje více zásad aktualizace, není pořadí spuštění nutně známé.

Omezení dotazů

  • Dotaz související se zásadami může vyvolat uložené funkce, ale:

    • Nemůže provádět dotazy mezi clustery.
    • Nemůže přistupovat k externím datům ani externím tabulkám.
    • Popisky se nedají vytvářet (pomocí modulu plug-in).
  • Dotaz nemá přístup pro čtení k tabulkám, které mají povolené zásady RestrictedViewAccess.

  • Informace o omezeních zásad aktualizací při příjmu streamovaných dat najdete v tématu Omezení příjmu dat streamování.

  • Dotaz zásady aktualizace by neměl odkazovat na žádné materializované zobrazení, jehož dotaz používá cílovou tabulku zásad aktualizace. To může vést k neočekávaným výsledkům.

  • Dotaz související se zásadami může vyvolat uložené funkce, ale:

    • Nemůže provádět dotazy mezi událostmi.
    • Nemůže přistupovat k externím datům ani externím tabulkám.
    • Popisky se nedají vytvářet (pomocí modulu plug-in).
  • Dotaz nemá přístup pro čtení k tabulkám, které mají povolené zásady RestrictedViewAccess.

  • Ve výchozím nastavení jsou pro všechny tabulky v Eventhouse povolené zásady příjmu dat streamování,. Pokud chcete používat funkce s operátorem join v zásadách aktualizace, musí být zásada příjmu dat streamování zakázaná. K zakázání použijte příkaz .altertableTableNamepolicystreamingingestionPolicyObject.

  • U kaskádových zásad aktualizací, které zahrnují join operátora, je nutné zakázat příjem streamů u všech nadřazených tabulek. Zvažte například kaskádové zásady aktualizace, kde tabulka1 aktualizuje tabulku 2, tabulka2 aktualizuje tabulku 3 a tabulku 3 aktualizuje tabulku 4. Pokud zásady aktualizace Table4 zahrnují spojení, musíte zakázat příjem dat streamování v tabulce Table1, Table2 a Table3.

  • Dotaz zásady aktualizace by neměl odkazovat na žádné materializované zobrazení, jehož dotaz používá cílovou tabulku zásad aktualizace. To může vést k neočekávaným výsledkům.

Upozorňující

Nesprávný dotaz může zabránit příjmu dat do zdrojové tabulky. Je důležité si uvědomit, že omezení a kompatibilita mezi výsledky dotazu a schématem zdrojových a cílových tabulek můžou způsobit nesprávný dotaz, aby se zabránilo příjmu dat do zdrojové tabulky.

Tato omezení se ověřují při vytváření a spouštění zásad, ale ne při aktualizaci libovolných uložených funkcí, na které může dotaz odkazovat. Proto je důležité provést všechny změny s opatrností, aby zásady aktualizace zůstaly nedotčené.

Při odkazování Source na tabulku v Query části zásad nebo ve funkcích odkazovaných na část Query :

  • Nepoužívejte kvalifikovaný název tabulky. Místo toho použijte TableName.

  • Nepoužívejte database("<DatabaseName>").TableName ani cluster("<ClusterName>").database("<DatabaseName>").TableName.

  • Nepoužívejte kvalifikovaný název tabulky. Místo toho použijte TableName.

  • Nepoužívejte database("<DatabaseName>").TableName ani cluster("<EventhouseName>").database("<DatabaseName>").TableName.

Objekt zásady aktualizace

Tabulka může mít přidružené žádné nebo více objektů zásad aktualizace. Každý takový objekt je reprezentován jako taška vlastností JSON s následujícími vlastnostmi definovanými.

Vlastnost Typ Popis
IsEnabled bool Stavy, pokud je zásada aktualizace pravdivá – povolená nebo nepravda – zakázaná
Zdroj string Název tabulky, která aktivuje vyvolání zásady aktualizace
SourceIsWildCard bool Pokud je true, Source může být vlastnost zástupným znakem. Zobrazení zásad aktualizace se vzorem zástupných znaků zdrojové tabulky
Dotaz string Dotaz použitý k vytvoření dat pro aktualizaci.
IsTransactional bool Uvádí, jestli je zásada aktualizace transakční nebo ne, výchozí hodnota je false. Pokud je zásada transakční a zásada aktualizace selže, zdrojová tabulka se neaktualizuje.
Šíření IngestionProperties bool Uvádí, jestli se vlastnosti zadané během příjmu dat do zdrojové tabulky, jako jsou značky rozsahu a čas vytvoření, vztahují na cílovou tabulku.
Spravovaná identita string Spravovaná identita, pro kterou se zásady aktualizace spouští. Spravovaná identita může být ID objektu system nebo rezervované slovo. Zásady aktualizace musí být nakonfigurované se spravovanou identitou, když dotaz odkazuje na tabulky v jiných databázích nebo tabulkách s povolenými zásadami zabezpečení na úrovni řádků. Další informace najdete v tématu Použití spravované identity ke spuštění zásady aktualizace.
Vlastnost Typ Popis
IsEnabled bool Stavy, pokud je zásada aktualizace pravdivá – povolená nebo nepravda – zakázaná
Zdroj string Název tabulky, která aktivuje vyvolání zásady aktualizace
SourceIsWildCard bool Pokud je true, Source může být vlastnost zástupným znakem.
Dotaz string Dotaz použitý k vytvoření dat pro aktualizaci
IsTransactional bool Uvádí, jestli je zásada aktualizace transakční nebo ne, výchozí hodnota je false. Pokud je zásada transakční a zásada aktualizace selže, zdrojová tabulka se neaktualizuje.
Šíření IngestionProperties bool Uvádí, jestli se vlastnosti zadané během příjmu dat do zdrojové tabulky, jako jsou značky rozsahu a čas vytvoření, vztahují na cílovou tabulku.

Poznámka:

V produkčníchsystémechch IsTransactional

Poznámka:

Kaskádové aktualizace jsou povolené, například z tabulky A do tabulky B až po tabulku C. Pokud jsou však zásady aktualizací definovány cyklickým způsobem, zjistí se to za běhu a řetěz aktualizací se vyříznou. Data se ingestují jenom jednou do každé tabulky v řetězci.

Příkazy pro správu

Mezi příkazy pro správu zásad aktualizace patří:

Zásady aktualizace se inicializují po příjmu dat.

Zásady aktualizace se projeví při ingestování nebo přesunu dat do zdrojové tabulky nebo rozsahů vytvořených ve zdrojové tabulce. Tyto akce je možné provést pomocí některého z následujících příkazů:

Upozorňující

Při vyvolání zásady aktualizace jako součást .set-or-replace příkazu se ve výchozím nastavení nahradí data v odvozených tabulkách stejným způsobem jako ve zdrojové tabulce. Data mohou být ztracena ve všech tabulkách s relací zásad aktualizace, pokud replace je vyvolán příkaz. Místo toho zvažte použití .set-or-append .

Aktualizace zásad se vzorem zástupných znaků zdrojové tabulky

Zásady aktualizace podporují ingestování z více zdrojových tabulek, které sdílejí stejný vzor, a současně používají stejný dotaz jako dotaz zásad aktualizace. To je užitečné, pokud máte několik zdrojových tabulek, obvykle sdílíte stejné schéma (nebo podmnožinu sloupců, které sdílejí společné schéma) a při příjmu do jedné cílové tabulky byste chtěli aktivovat příjem dat do jedné cílové tabulky při ingestování některé z těchto tabulek. V tomto případě místo definování více zásad aktualizace, každý pro jednu zdrojovou tabulku, můžete definovat jednu zásadu aktualizace se zástupným znakem jako Source. Zásady Query aktualizace musí splňovat všechny zdrojové tabulky odpovídající vzoru. Pokud chcete odkazovat na zdrojovou tabulku v dotazu zásad aktualizace, můžete použít speciální symbol s názvem $source_table. Podívejte se na příklad v příkladu zásad aktualizace zástupných znaků.

Odebrání dat ze zdrojové tabulky

Po ingestování dat do cílové tabulky je možné je volitelně odebrat ze zdrojové tabulky. Nastavte období obnovitelného 0sec odstranění (nebo00:00:00) v zásadách uchovávání informací zdrojové tabulky a zásadu aktualizace jako transakční. Platí následující podmínky:

  • Zdrojová data se nedají dotazovat ze zdrojové tabulky.
  • Zdrojová data se v trvalém úložišti neuchovávají jako součást operace příjmu dat.
  • Provozní výkon se zlepšuje. Prostředky po příjmu dat se snižují pro operace výmazu na pozadí v rozsahech ve zdrojové tabulce.

Poznámka:

Pokud zdrojová tabulka obsahuje období obnovitelného 0sec odstranění (nebo 00:00:00), musí být všechny zásady aktualizace odkazující na tuto tabulku transakční.

Dopad na výkon

Zásady aktualizace můžou ovlivnit výkon a příjem dat v rozsahu dat se vynásobí počtem cílových tabulek. Je důležité optimalizovat dotaz související se zásadami. Dopad na výkon zásady aktualizace můžete otestovat vyvoláním zásad na již existující rozsahy, před vytvořením nebo změnou zásad nebo funkcí používanou s dotazem.

Vyhodnocení využití prostředků

Použijte .show queriesk vyhodnocení využití prostředků (procesor, paměť atd.) s následujícími parametry:

  • Source Nastavte vlastnost, název zdrojové tabulky jakoMySourceTable
  • Query Nastavení vlastnosti pro volání funkce s názvemMyFunction()
// '_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

Transakční nastavení

Nastavení zásad IsTransactional aktualizace definuje, jestli je zásada aktualizace transakční a může ovlivnit chování aktualizace zásad následujícím způsobem:

  • IsTransactional:false: Pokud je hodnota nastavená na výchozí hodnotu, nepravda, zásada aktualizace nezaručuje konzistenci mezi daty ve zdrojové a cílové tabulce. Pokud se zásada aktualizace nezdaří, data se ingestují jenom do zdrojové tabulky, a ne do cílové tabulky. V tomto scénáři je operace příjmu dat úspěšná.
  • IsTransactional:true: Pokud je hodnota nastavena na hodnotu true, nastavení zaručuje konzistenci mezi daty ve zdrojové a cílové tabulce. Pokud se zásada aktualizace nezdaří, data se neingestují do zdrojové nebo cílové tabulky. V tomto scénáři je operace příjmu neúspěšná.

Zpracování selhání

Když aktualizace zásad selžou, zpracovávají se jinak podle toho, jestli IsTransactional je true nastavení nebo false. Mezi běžné důvody selhání zásad aktualizace patří:

  • Neshoda mezi výstupním schématem dotazu a cílovou tabulkou
  • Jakákoli chyba dotazu.

Selhání aktualizací zásad můžete zobrazit pomocí .show ingestion failures následujícího příkazu : V jiném případě můžete příjem dat opakovat ručně.

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

Příklad extrakce, transformace, načtení

Nastavení zásad aktualizace můžete použít k extrakci, transformaci, načítání (ETL).

V tomto příkladu použijte zásadu aktualizace s jednoduchou funkcí k provedení ETL. Nejprve vytvoříme dvě tabulky:

  • Zdrojová tabulka – obsahuje jeden sloupec typu řetězec, do kterého se data ingestují.
  • Cílová tabulka – obsahuje požadované schéma. V této tabulce je definována zásada aktualizace.
  1. Pojďme vytvořit zdrojovou tabulku:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Dále vytvořte cílovou tabulku:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Pak vytvořte funkci pro extrakci dat:

    .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. Teď nastavte zásadu aktualizace tak, aby vyvolala funkci, kterou jsme vytvořili:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Pokud chcete zdrojovou tabulku po ingestování dat do cílové tabulky vyprázdnit, definujte zásadu uchovávání informací ve zdrojové tabulce, která má jako hodnotu SoftDeletePeriod0s .

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

Příklad zásad aktualizace zástupných znaků

Následující příklad vytvoří zásadu aktualizace s jedinou položkou v tabulce TargetTable. Zásady odkazují na všechny tabulky odpovídající vzor SourceTable* jako zdroj. Jakýkoli příjem dat do tabulky, která odpovídá vzoru (v místní databázi), aktivuje zásady aktualizace a ingestuje data do TargetTable, na základě dotazu na zásady aktualizace.

  1. Vytvořte dvě zdrojové tabulky:

    .create table SourceTable1(Id:long, Value:string)
    
    .create table SourceTable2(Id:long, Value:string)
    
  2. Vytvořte cílovou tabulku:

    .create table TargetTable(Id:long, Value:string, Source:string)
    
  3. Vytvořte funkci, která bude sloužit jako Query zásada aktualizace. Funkce používá $source_table symbol k odkazování na Source zásady aktualizace. Slouží skipValidation=true k přeskočení ověřování během funkce vytvoření, protože $source_table je známo pouze během provádění zásad aktualizace. Funkce se ověří během dalšího kroku při změně zásad aktualizace.

    .create function with(skipValidation=true) IngestToTarget()
    {
        $source_table 
        | parse Value with "I'm from table " Source
        | project Id, Value, Source
    }
    
  4. Vytvořte zásadu aktualizace .TargetTable Zásady odkazují na všechny tabulky odpovídající vzor SourceTable* jako zdroj.

        .alter table TargetTable policy update
        ```[{ 
                "IsEnabled": true, 
                "Source": "SourceTable*", 
                "SourceIsWildCard" : true,
                "Query": "IngestToTarget()",
                "IsTransactional": true,
                "PropagateIngestionProperties": true
        }]```
    
    
  5. Příjem do zdrojových tabulek Obě příjmy dat aktivují zásadu aktualizace:

    .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. Dotaz TargetTable:

     TargetTable
    
    identifikační číslo Hodnota Zdroj
    1 Pocházím z tabulky SourceTable1 Zdrojová tabulka1
    2 Pocházím z tabulky SourceTable1 Zdrojová tabulka1
    3 Pocházím z tabulky SourceTable2 Zdrojová tabulka2
    4 Pocházím z tabulky SourceTable2 Zdrojová tabulka2