Share via


.update table command (förhandsversion)

Kommandot .update table utför datauppdateringar i en angiven tabell genom att ta bort och lägga till poster atomiskt.

Varning

Det här kommandot går inte att återställa.

Anteckning

När du kör .update table kommandot i en tabell som är källan för en uppdateringsprincip.update table utlöser kommandot dessa uppdateringsprinciper som tabellen som ändras för är uppdateringsprincipens källa.

Du kan ta bort upp till 5 miljoner poster i ett enda kommando.

Behörigheter

Du måste ha minst table Admin behörigheter för att köra det här kommandot.

Syntax

Det finns två syntaxalternativ, förenklad syntax och utökad syntax.

Läs mer om syntaxkonventioner.

Expanderad syntax

Den utökade syntaxen ger flexibiliteten att definiera en fråga för att ta bort rader och en annan fråga för att lägga till rader:

.updatetableTablenamedeleteDeleteIdentifierappendAppendIdentifier [with(propertyName=propertyValue)] <|
letDeleteIdentifier=DeletePredicate;
letAppendIdentifier=AppendPredicate;

Parametrar för utökad syntax

Namn Typ Obligatorisk Beskrivning
TableName string ✔️ Namnet på tabellen som ska uppdateras.
DeleteIdentifier string ✔️ Identifierarnamnet som används för att ange borttagningspredikatet som tillämpas på den uppdaterade tabellen.
DeletePredicate string ✔️ Texten i en fråga vars resultat används som data för att ta bort. Borttagningspredikatet måste innehålla minst en where operator och kan bara använda följande operatorer: extend, where, projectoch joinlookup.
AppendIdentifier string ✔️ Identifierarnamnet som används för att ange det tilläggspredikat som tillämpas på den uppdaterade tabellen.
AppendPredicate string ✔️ Texten i en fråga vars resultat används som data för att lägga till.

Viktigt

  • Både borttagnings- och tilläggspredikat kan inte använda fjärrentiteter, korsdatabaser och klusteröverskridande entiteter. Predikat kan inte referera till en extern tabell eller använda operatorn externaldata .
  • Tilläggs- och borttagningsfrågor förväntas ge deterministiska resultat. Icke-terministiska frågor kan leda till oväntade resultat. En fråga är deterministisk om och endast om den skulle returnera samma data om den kördes flera gånger.
  • Frågor kan köras mer än en gång inom körningen update . Om de mellanliggande frågeresultaten är inkonsekventa kan uppdateringskommandot ge oväntade resultat.

Förenklad syntax

Den förenklade syntaxen kräver både en tilläggsfråga och en nyckel. Nyckeln är en kolumn i tabellen som representerar unika värden i tabellen. Den här kolumnen används för att definiera vilka rader som ska tas bort från tabellen. En koppling utförs mellan den ursprungliga tabellen och tilläggsfrågan för att identifiera rader som är överens om deras värde med avseende på den här kolumnen.

.updatetableTableNameIDColumnName [with(propertyName=propertyValue)] <|
appendQuery

Parametrar för förenklad syntax

Namn Typ Obligatorisk Beskrivning
TableName string ✔️ Namnet på tabellen som ska uppdateras.
IDColumnName string ✔️ Namnet på kolumnen som identifierar rader. Kolumnen måste finnas i både tabellen och appendQuery.
appendQuery string ✔️ Texten i en fråga eller ett hanteringskommando vars resultat används som data för att lägga till. Frågans schema måste vara samma som tabellens schema.

Viktigt

  • Append-frågan kan inte använda fjärrentiteter, korsdatabaser och klusteröverskridande entiteter, referera till en extern tabell eller använda operatorn externaldata .
  • Append-frågan förväntas ge deterministiska resultat. Icke-terministiska frågor kan leda till oväntade resultat. En fråga är deterministisk om och endast om den returnerar samma data om den körs flera gånger.
  • Frågor kan köras mer än en gång inom körningen update . Om de mellanliggande frågeresultaten är inkonsekventa kan uppdateringskommandot ge oväntade resultat.

Egenskaper som stöds

Namn Typ Description
Whatif boolesk Om truereturnerar det antal poster som ska läggas till/tas bort i varje fragment, utan att lägga till/ta bort några poster. Standardvärdet är false.

Viktigt

Vi rekommenderar att du först kör i whatif läget innan du kör uppdateringen för att verifiera predikaten innan du tar bort eller lägger till data.

Returer

Resultatet av kommandot är en tabell där varje post representerar en omfattning som antingen har skapats med nya data eller tagits bort.

Namn Typ Description
Tabell string Tabellen där omfattningen skapades eller togs bort.
Åtgärd string Skapa eller ta bort beroende på vilken åtgärd som utförs i omfattningen.
ExtentId guid Den unika identifieraren för den omfattning som skapades eller togs bort av kommandot.
RowCount long Antalet rader som skapats eller tagits bort i det angivna området med kommandot .

Välj mellan .update table och materialiserade vyer

Det finns scenarier där du kan använda antingen .update table kommandot eller en materialiserad vy för att uppnå samma mål i en tabell. En materialiserad vy kan till exempel användas för att behålla den senaste versionen av varje post, eller så kan en uppdatering användas för att uppdatera poster när en ny version är tillgänglig.

Använd följande riktlinjer för att bestämma vilken metod som ska användas:

  • Om uppdateringsmönstret inte stöds av materialiserade vyer använder du uppdateringskommandot.
  • Om källtabellen har en hög inmatningsvolym, men bara några få uppdateringar, kan uppdateringskommandot vara mer högpresterande och förbruka mindre cacheminne eller lagringsutrymme än materialiserade vyer. Det beror på att materialiserade vyer måste bearbeta om alla inmatade data, vilket är mindre effektivt än att identifiera de enskilda poster som ska uppdateras baserat på tilläggs- eller borttagningspredikaten.
  • Materialiserade vyer är en helt hanterad lösning. Den materialiserade vyn definieras en gång och materialiseringen sker i bakgrunden av systemet. Uppdateringskommandot kräver en samordnad process (till exempel Azure Data Factory, Logic Apps, Power Automate och andra) som uttryckligen kör uppdateringskommandot varje gång det finns uppdateringar. Om materialiserade vyer fungerar tillräckligt bra för ditt användningsfall kräver materialiserade vyer mindre hantering och underhåll.

Exempel – förenklad syntax

I följande exempel används den förenklade syntaxen.

Allmänt exempel

Följande tabell skapas.

.set-or-replace People <|
datatable(Name:string, Address:string)[
  "Alice", "221B Baker street",
  "Bob", "1600 Pennsylvania Avenue",
  "Carl", "11 Wall Street New York"
]
Name Adress
Alice 221B Baker gata
Bob 1600 Pennsylvania aveny
Carl 11 Wall Street New York

Sedan körs följande uppdateringskommando:

.update table People on Name <|
  datatable(Name:string, Address:string)[
  "Alice", "2 Macquarie Street",
  "Diana", "350 Fifth Avenue" ]

Där appendQuery ger följande resultatuppsättning:

Name Adress
Alice 2 Macquarie gata
Diana 350 Femte avenyn

Eftersom vi uppdaterade iName kolumnen tas raden Alice bort och tabellen efter uppdateringen ser ut så här:

Name Adress
Alice 2 Macquarie gata
Bob 1600 Pennsylvania aveny
Carl 11 Wall Street New York
Diana 350 Femte avenyn

Observera att Diana inte hittades i den ursprungliga tabellen. Detta är giltigt och ingen motsvarande rad har tagits bort.

Om det skulle ha funnits flera rader med Alice-namn i den ursprungliga tabellen skulle alla ha tagits bort och ersatts av den enda Alice-raden som vi har i slutet.

Exempeltabell

Nästa exempel baseras på följande tabell:

.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])

Det här kommandot skapar en tabell med 100 poster som börjar med:

ID Kod Färg
1 Medarbetare Blue
2 Kund Grå
3 Medarbetare Red
4 Kund Blue
5 Medarbetare Grå
6 Kund Red
6 Medarbetare Blue

Uppdatera en enskild kolumn på en rad

I följande exempel används den förenklade syntaxen för att uppdatera en enskild kolumn på en enskild rad som matchar tilläggspredikatet:

.update table Employees on Id with(whatif=true) <|
    Employees
    | where Id==3
    | extend Color="Orange"

Observera att whatif är inställt på sant. Efter den här frågan är tabellen oförändrad, men kommandot returnerar att det skulle finnas en omfattning med en rad borttagen och en ny omfattning med en rad.

Följande kommando utför faktiskt uppdateringen:

.update table Employees on Id <|
  Employees
  | where Id==3
  | extend Color="Orange"

Uppdatera en enskild kolumn på flera rader

Följande exempel uppdateras på en enskild kolumn Color till värdet Grön på de rader som matchade tilläggspredikatet.

.update table Employees on Id <|
  Employees
  | where Code=="Employee"
  | where Color=="Blue"
  | extend Color="Green"

Uppdatera flera kolumner på flera rader

I följande exempel uppdateras flera kolumner på alla rader som matchar tilläggspredikatet.

.update table Employees on Id <|
  Employees
  | where Color=="Gray"
  | extend Code=strcat("ex-", Code)
  | extend Color=""

Uppdatera rader med hjälp av en annan tabell

I det här exemplet är det första steget att skapa följande mappningstabell:

.set-or-replace ColorMapping <|
  datatable(OldColor:string, NewColor:string)[
    "Red", "Pink",
    "Blue", "Purple",
    "Gray", "LightGray",
    "Orange", "Yellow",
    "Green", "AppleGreen"
  ]

Den här mappningstabellen används sedan för att uppdatera vissa färger i den ursprungliga tabellen baserat på tilläggspredikatet och motsvarande "Ny färg":

.update table Employees on Id <|
  Employees
  | where Code=="Customer"
  | lookup ColorMapping on $left.Color==$right.OldColor
  | project Id, Code, Color=NewColor

Uppdatera rader med en mellanlagringstabell

Ett populärt mönster är att först landa data i en mellanlagringstabell innan huvudtabellen uppdateras.

Det första kommandot skapar en mellanlagringstabell:

.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ästa kommando uppdaterar huvudtabellen med data i mellanlagringstabellen:

.update table Employees on Id <|
  MyStagingTable

Vissa poster i mellanlagringstabellen fanns inte i huvudtabellen (d.s. hade Id>100) men infogades fortfarande i huvudtabellen (upsert-beteende).

Exempel – utökad syntax

I följande exempel används den utökade syntaxen.

Sammansatt nyckel

Den förenklade syntaxen förutsätter att en enda kolumn kan matcha rader i appendQuery för att härleda rader som ska tas bort. Mer än en kolumn kan till exempel användas med sammansatta nycklar.

Det första kommandot skapar en tabell med sammansatta nycklar:

.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"
  ]

Nästa kommando uppdaterar en specifik post med hjälp av den utökade syntaxen:

.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";

Fullständig kontroll

I följande exempel tas alla rader med CodeMedarbetare bort och rader med CodeMedarbetareochColor lila läggs till. Fler rader tas bort än infogas.

.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";

Den här typen av åtgärd är endast möjlig med hjälp av den utökade syntaxen, som oberoende styr borttagnings- och tilläggsåtgärderna.