Sdílet prostřednictvím


Přehled aktualizací zásad

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.

Poznámka:

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

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.

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

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.

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

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 .

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 aktualizací můžou mít vliv na výkon clusteru a ingestování rozsahů 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í příkazu pomocí .show ingestion failures následujícího příkazu :

.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