Příkaz .update table (Preview)
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
Existují dvě možnosti syntaxe, zjednodušená syntaxe a rozšířená syntaxe.
Přečtěte si další informace o konvencích syntaxe.
Rozšířená syntaxe
Rozšířená syntaxe nabízí flexibilitu při definování dotazu pro odstranění řádků a jiného dotazu pro připojení řádků:
.update
table
TableNamedelete
DeleteIdentifier AppendIdentifierappend
[with
(
propertyName=
propertyValue])
<|
let
DeleteIdentifier=
DeletePredicate;
let
AppendIdentifier=
AppendPredicate;
Parametry pro rozšířenou syntaxi
Name | Type | Požadováno | Popis |
---|---|---|---|
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 odstranění musí obsahovat alespoň jeden where operátor a může používat pouze následující operátory: extend , where , project join a lookup . |
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.
Zjednodušená syntaxe
Zjednodušená syntaxe vyžaduje přidávací dotaz a klíč. Klíč je sloupec v tabulce, který představuje jedinečné hodnoty v tabulce. Tento sloupec slouží k definování řádků, které mají být z tabulky odstraněny. Spojení se provádí mezi původní tabulkou a přidávacím dotazem, aby bylo možné identifikovat řádky, které souhlasí s jejich hodnotou ve vztahu k tomuto sloupci.
.update
table
TableName v IDColumnName [with
(
propertyName=
propertyValue)
]<|
appendQuery
Parametry pro zjednodušenou syntaxi
Name | Type | Požadováno | Popis |
---|---|---|---|
TableName | string |
✔️ | Název tabulky, která se má aktualizovat. |
IDColumnName | string |
✔️ | Název sloupce identifikující řádky. Sloupec musí být v tabulce i v appendQuery. |
appendQuery | string |
✔️ | Text dotazu nebo příkazu pro správu, jehož výsledky se používají jako data k připojení. Schéma dotazu musí být stejné jako schéma tabulky. |
Důležité
- Přidávací dotaz nemůže používat vzdálené entity, entity mezi databázemi a entity mezi clustery, odkazovat na externí tabulku nebo použít
externaldata
operátor. - Očekává se, že přidávací dotaz vytvoří deterministické výsledky. Nedeterministické dotazy můžou vést k neočekávaným výsledkům. Dotaz je deterministický, pokud a pouze pokud vrátí stejná data, pokud se spustí 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 – zjednodušená syntaxe
Následující příklady používají zjednodušenou syntaxi.
Obecný příklad
Vytvoří se následující tabulka.
.set-or-replace People <|
datatable(Name:string, Address:string)[
"Alice", "221B Baker street",
"Bob", "1600 Pennsylvania Avenue",
"Carl", "11 Wall Street New York"
]
Název | Address |
---|---|
Alice | 221B Baker street |
Robert | 1600 Pennsylvania Avenue |
Carl | 11 Wall Street New York |
Pak se spustí následující příkaz aktualizace:
.update table People on Name <|
datatable(Name:string, Address:string)[
"Alice", "2 Macquarie Street",
"Diana", "350 Fifth Avenue" ]
Kde appendQuery poskytuje následující sadu výsledků:
Název | Address |
---|---|
Alice | 2 Macquarie Street |
Diana | 350 Pátá avenue |
Vzhledem k tomu, že jsme Name
aktualizovali sloupec, řádek Alice se odstraní a tabulka po aktualizaci bude vypadat takto:
Název | Address |
---|---|
Alice | 2 Macquarie Street |
Robert | 1600 Pennsylvania Avenue |
Carl | 11 Wall Street New York |
Diana | 350 Pátá avenue |
Všimněte si, že Diana nebyla v původní tabulce nalezena. Toto je platné a nebyl odstraněn žádný odpovídající řádek.
Podobně pokud by v původní tabulce bylo více řádků s názvem Alice, všechny by byly odstraněny a nahrazeny jedním řádkem Alice, který máme na konci.
Příklad tabulky
Další příklady jsou založené na následující tabulce:
.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 používá zjednodušenou syntaxi k aktualizaci jednoho sloupce na jednom řádku, který odpovídá predikátu připojení:
.update table Employees on Id with(whatif=true) <|
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 on Id <|
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ěch řádcích, které odpovídaly predikátu připojení.
.update table Employees on Id <|
Employees
| where Code=="Employee"
| where Color=="Blue"
| extend Color="Green"
Aktualizace více sloupců na více řádcích
Následující příklad aktualizuje více sloupců na všech řádcích, které odpovídají predikátu připojení.
.update table Employees on Id <|
Employees
| where Color=="Gray"
| 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 na základě predikátu připojení a odpovídající nové barvy:
.update table Employees on Id <|
Employees
| where Code=="Customer"
| 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 on Id <|
MyStagingTable
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).
Příklady – rozšířená syntaxe
Následující příklady používají rozbalenou syntaxi.
Složený klíč
Zjednodušená syntaxe předpokládá, že jeden sloupec může odpovídat řádkům v appendQuery, aby odvozovaly řádky k odstranění. Můžete použít více než jeden sloupec, například pomocí složených 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";
Úplný ovládací prvek
V následujícím příkladu se odstraní všechny řádky se Code
zaměstnancem a řádky sCode
zaměstnancemaColor
fialovou barvou se připojí. Odstraní se více řádků, než se vloží.
.update table Employees delete D append A <|
let D = Employees
| where Code=="Employee";
let A = Employees
| where Code=="Employee"
| where Color=="Purple"
| extend Code="Corporate"
| extend Color="Mauve";
Tento typ akce je možný pouze pomocí rozšířené syntaxe, která nezávisle řídí operace odstranění a připojení.
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