Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
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
ManagedIdentityvlastností a spravovaná identita musí mítviewerroli 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
joinv 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í
joinoperá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>").TableNameanicluster("<ClusterName>").database("<DatabaseName>").TableName.
Nepoužívejte kvalifikovaný název tabulky. Místo toho použijte
TableName.Nepoužívejte
database("<DatabaseName>").TableNameanicluster("<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ří:
-
.show table *TableName* policy updatezobrazuje aktuální zásady aktualizace tabulky. -
.alter table *TableName* policy updatedefinuje aktuální zásady aktualizace tabulky. -
.alter-merge table *TableName* policy updatepřipojí definice k aktuální zásadě aktualizace tabulky. -
.delete table *TableName* policy updateodstraní 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
PropagateIngestionPropertiesse projeví jenom v operacích příjmu dat. Pokud se zásada aktualizace aktivuje jako součást.move extentsnebo.replace extentspří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 .
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:
-
SourceNastavte vlastnost, název zdrojové tabulky jakoMySourceTable -
QueryNastavení 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
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.
Vytvořte dvě zdrojové tabulky:
.create table SourceTable1(Id:long, Value:string).create table SourceTable2(Id:long, Value:string)Vytvořte cílovou tabulku:
.create table TargetTable(Id:long, Value:string, Source:string)Vytvořte funkci, která bude sloužit jako
Queryzásada aktualizace. Funkce používá$source_tablesymbol k odkazování naSourcezásady aktualizace. SloužískipValidation=truek přeskočení ověřování během funkce vytvoření, protože$source_tableje 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 }Vytvořte zásadu aktualizace .
TargetTableZásady odkazují na všechny tabulky odpovídající vzorSourceTable*jako zdroj..alter table TargetTable policy update ```[{ "IsEnabled": true, "Source": "SourceTable*", "SourceIsWildCard" : true, "Query": "IngestToTarget()", "IsTransactional": true, "PropagateIngestionProperties": true }]```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" ]Dotaz
TargetTable:TargetTableidentifikač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