Příkaz .update table
Příkaz .update table
provádí aktualizace dat v zadané tabulce odstraněním a připojením záznamů atomicky.
Upozorňující
Tento příkaz není možné obnovit.
Poznámka:
Když spustíte .update table
příkaz v tabulce, která je zdrojem zásad aktualizace, příkaz aktivuje tyto zásady aktualizace, .update table
pro které je upravená tabulka zdrojem zásad aktualizace.
V jednom příkazu můžete odstranit až 5 milionů záznamů.
Oprávnění
Ke spuštění tohoto příkazu musíte mít alespoň oprávnění správce tabulky.
Syntaxe
Poznámka:
Zjednodušená syntaxe, která byla k dispozici ve verzi Preview, je zastaralá.
Přečtěte si další informace o konvencích syntaxe.
.update
[async]
table
TableName delete
DeleteIdentifier AppendIdentifier append
[with
(
propertyName =
propertyValue ] )
<|
let
DeleteIdentifier=
OdstranitPredicate;
let
AppendIdentifier=
AppendPredicate;
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
async | string |
Pokud je zadáno, znamená to, že příkaz běží v asynchronním režimu. | |
TableName | string |
✔️ | Název tabulky, která se má aktualizovat. |
DeleteIdentifier | string |
✔️ | Název identifikátoru použitý k určení predikátu odstranění použitého na aktualizovanou tabulku. |
OdstranitPredicate | string |
✔️ | Text dotazu, jehož výsledky se používají jako data k odstranění. Predikát má stejná omezení jako predikát obnovitelného odstranění. |
AppendIdentifier | string |
✔️ | Název identifikátoru použitý k zadání predikátu připojení použitého na aktualizovanou tabulku. |
AppendPredicate | string |
✔️ | Text dotazu, jehož výsledky se používají jako data k připojení. |
Důležité
- Predikáty odstranění i připojení nemůžou používat vzdálené entity, entity mezi databázemi a entity mezi clustery. Predikáty nemůžou odkazovat na externí tabulku nebo používat
externaldata
operátor. - Očekává se, že přidávací a odstraňovací dotazy generují deterministické výsledky. Nedeterministické dotazy můžou vést k neočekávaným výsledkům. Dotaz je deterministický, pouze pokud by vracel stejná data, pokud by byl spuštěn vícekrát.
- Například použití operátoru
take
,sample
operátoru,rand
funkce a dalších takových operátorů se nedoporučuje, protože tyto operátory nejsou deterministické.
- Například použití operátoru
- V rámci
update
provádění se dotazy můžou spouštět více než jednou. Pokud jsou výsledky zprostředkujícího dotazu nekonzistentní, může příkaz update vést k neočekávaným výsledkům.
Podporované vlastnosti
Name | Typ | Popis |
---|---|---|
whatif | bool | Pokud true vrátí počet záznamů, které budou připojeny / odstraněny v každém horizontálním oddílu, bez připojení / odstranění záznamů. Výchozí hodnota je false . |
distribuovaný | bool | Pokud true příkaz ingestuje ze všech uzlů, které spouští dotaz paralelně. Výchozí hodnota je false . Podívejte se na tipy k výkonu. |
Důležité
Před spuštěním aktualizace doporučujeme nejprve spustit predikáty v whatif
režimu, aby se před odstraněním nebo připojením dat ověřily predikáty.
Návraty
Výsledkem příkazu je tabulka, ve které každý záznam představuje rozsah , který byl vytvořen s novými daty nebo měl odstraněné záznamy.
Name | Typ | Popis |
---|---|---|
Table | string |
Tabulka, ve které byl rozsah vytvořen nebo odstraněn. |
Akce | string |
Vytvořte nebo odstraňte v závislosti na akci provedené v rozsahu. |
ExtentId | guid |
Jedinečný identifikátor rozsahu, který byl vytvořen nebo odstraněn příkazem. |
RowCount | long |
Počet řádků vytvořených nebo odstraněných v zadaném rozsahu příkazem. |
Volba mezi .update table
a materializovanými zobrazeními
Existují scénáře, ve kterých můžete pomocí .update table
příkazu nebo materializovaného zobrazení dosáhnout stejného cíle v tabulce. Materializované zobrazení lze například použít k zachování nejnovější verze každého záznamu nebo aktualizace k aktualizaci záznamů, pokud je k dispozici nová verze.
Při rozhodování, kterou metodu použít, použijte následující pokyny:
- Pokud model aktualizace materializovaná zobrazení nepodporuje, použijte příkaz update.
- Pokud má zdrojová tabulka velký objem příjmu dat, ale jenom několik aktualizací, může být použití příkazu update výkonnější a spotřebovávat méně mezipaměti nebo úložiště než materializovaná zobrazení. Je to proto, že materializovaná zobrazení potřebují znovu zpracovat všechna ingestovaná data, což je méně efektivní než identifikace jednotlivých záznamů, které se mají aktualizovat na základě predikátů připojení nebo odstranění.
- Materializovaná zobrazení je plně spravované řešení. Materializované zobrazení je definováno jednou a materializace probíhá na pozadí systémem. Příkaz update vyžaduje orchestrovaný proces (například Azure Data Factory, Logic Apps, Power Automate a další), který explicitně spustí příkaz aktualizace pokaždé, když dojde k aktualizacím. Pokud materializovaná zobrazení dobře fungují pro váš případ použití, vyžaduje použití materializovaných zobrazení méně správy a údržby.
Tipy týkající se výkonu
- Příjem dat je operace náročná na prostředky, která může ovlivnit souběžné aktivity v clusteru, včetně spuštěných dotazů. Doporučujeme, abyste se vyhnuli následujícím akcím náročným na prostředky: spouštění mnoha
.update
příkazů najednou a náročnému používání distribuované vlastnosti. - Omezte přidávací data na méně než 1 GB na operaci. V případě potřeby použijte více aktualizačních příkazů.
distributed
Příznak nastavte pouzetrue
v případě, že je množství dat vytvářených dotazem velké, překročí 1 GB a nevyžaduje serializaci: více uzlů pak může vytvořit výstup paralelně. Tento příznak nepoužívejte, pokud jsou výsledky dotazu malé, protože může zbytečně generovat mnoho malých datových horizontálních oddílů.
Příklady
V příkladech použijeme následující tabulku:
.set-or-replace Employees <|
range i from 1 to 100 step 1
| project Id=i
| extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
| extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])
Tento příkaz vytvoří tabulku s 100 záznamy začínající na:
ID | Kód | Color |
---|---|---|
0 | Zaměstnanec | Modrý |
2 | Zákazník | Šedá |
3 | Zaměstnanec | Červený |
4 | Zákazník | Modrý |
5 | Zaměstnanec | Šedá |
6 | Zákazník | Červený |
6 | Zaměstnanec | Modrý |
Aktualizace jednoho sloupce na jednom řádku
Následující příklad aktualizuje jeden sloupec na jednom řádku:
.update table Employees delete D append A with(whatif=true) <|
let D = Employees
| where Id==3;
let A = Employees
| where Id==3
| extend Color="Orange";
Všimněte si, že whatif
je nastavená hodnota true. Po tomto dotazu se tabulka nezmění, ale příkaz vrátí rozsah s odstraněným řádkem a novým rozsahem s jedním řádkem.
Následující příkaz ve skutečnosti provede aktualizaci:
.update table Employees delete D append A <|
let D = Employees
| where Id==3;
let A = Employees
| where Id==3
| extend Color="Orange";
Aktualizace jednoho sloupce na více řádcích
Následující příklad aktualizuje jeden sloupec Color
na hodnotu Green na těchto řádcích, které mají modrou hodnotu.
.update table Employees delete D append A <|
let D = Employees
| where Code=="Employee"
| where Color=="Blue";
let A = D
| extend Color="Green";
Zde jsme znovu použili identifikátor odstranění v definici připojeného predikátu.
Aktualizace více sloupců na více řádcích
Následující příklad aktualizuje více sloupců na všech řádcích barvou šedou barvou.
.update table Employees delete D append A <|
let D = Employees
| where Color=="Gray";
let A = D
| extend Code=strcat("ex-", Code)
| extend Color="";
Aktualizace řádků pomocí jiné tabulky
V tomto příkladu je prvním krokem vytvoření následující tabulky mapování:
.set-or-replace ColorMapping <|
datatable(OldColor:string, NewColor:string)[
"Red", "Pink",
"Blue", "Purple",
"Gray", "LightGray",
"Orange", "Yellow",
"Green", "AppleGreen"
]
Tato tabulka mapování se pak použije k aktualizaci některých barev v původní tabulce:
.update table Employees delete D append A <|
let D = Employees
| where Code=="Customer";
let A = D
| lookup ColorMapping on $left.Color==$right.OldColor
| project Id, Code, Color=NewColor
Aktualizace řádků pomocí pracovní tabulky
Oblíbeným vzorem je nejprve přistát data v pracovní tabulce před aktualizací hlavní tabulky.
První příkaz vytvoří pracovní tabulku:
.set-or-replace MyStagingTable <|
range i from 70 to 130 step 5
| project Id=i
| extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
| extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])
Následující příkaz aktualizuje hlavní tabulku daty v pracovní tabulce:
.update table Employees delete D append A <|
let A = MyStagingTable;
let D = Employees
| join kind=leftsemi MyStagingTable on Id
| where true;
Některé záznamy v pracovní tabulce nebyly v hlavní tabulce (to znamená) Id>100
vloženy do hlavní tabulky (to znamená) a přesto byly vloženy do hlavní tabulky (chování upsertu).
Složený klíč
První příkaz vytvoří tabulku se složenými klíči:
.set-or-replace VersionedArticle <|
datatable(ArticleId:string, Version:int, Detail:string)[
"A", 1, "Early version",
"B", 1, "News about mobiles",
"C", 1, "Opinion article",
"B", 2, "Revision about brand X",
"B", 3, "Revision about brand Y",
"C", 2, "Fact check"
]
Další příkaz aktualizuje konkrétní záznam pomocí rozšířené syntaxe:
.update table VersionedArticle delete D append A <|
let D = VersionedArticle
| where ArticleId=="B"
| where Version==3;
let A = VersionedArticle
| where ArticleId=="B"
| where Version==3
| extend Detail = "Revision about brand Z";
Související obsah
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro