Přehled aktualizací zásad
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.
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 aktualizace zásad a schéma cílové tabulky se musí shodovat s názvy, typy a pořadí sloupců.
- 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ítviewer
roli 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.
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 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.alter
table
TableNamepolicy
streamingingestion
PolicyObject.
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
anicluster("<ClusterName>").database("<DatabaseName>").TableName
.
- Nepoužívejte kvalifikovaný název tabulky. Místo toho použijte
TableName
. - Nepoužívejte
database("<DatabaseName>").TableName
anicluster("<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 | 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ří:
-
.show table *TableName* policy update
zobrazuje aktuální zásady aktualizace tabulky. -
.alter table *TableName* policy update
definuje aktuální zásady aktualizace tabulky. -
.alter-merge table *TableName* policy update
připojí definice k aktuální zásadě aktualizace tabulky. -
.delete table *TableName* policy update
odstraní aktuální zásadu aktualizace tabulky.
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ů:
- .ingest (pull)
- .ingest (vložený)
- .set | .append | .set-or-append | .set-or-replace
- Rozsahy .move
-
Rozsahy .replace
- Příkaz
PropagateIngestionProperties
se projeví jenom v operacích příjmu dat. Pokud se zásada aktualizace aktivuje jako součást.move extents
nebo.replace extents
příkazu, tato možnost nemá žádný vliv.
- 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 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 queries
k 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.
Pojďme vytvořit zdrojovou tabulku:
.create table MySourceTable (OriginalRecord:string)
Dále vytvořte cílovou tabulku:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
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 }
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}]'
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
SoftDeletePeriod
0s ..alter-merge table MySourceTable policy retention softdelete = 0s