Sdílet prostřednictvím


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 ] )<|
letDeleteIdentifier= OdstranitPredicate;
letAppendIdentifier= 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átorutake,sample operátoru, rand funkce a dalších takových operátorů se nedoporučuje, protože tyto operátory nejsou deterministické.
  • 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 truevrá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 truepří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 pouze true 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>100vlož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";