.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:
.update
table
Tablenamedelete
DeleteIdentifierappend
AppendIdentifier [with
(
propertyName=
propertyValue)
] <|
let
DeleteIdentifier=
DeletePredicate;
let
AppendIdentifier=
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 , project och join lookup . |
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.
- Till exempel rekommenderas inte användning av
take
operator,sample
operator,rand
funktion och andra sådana operatorer eftersom dessa operatorer inte är deterministiska.
- Till exempel rekommenderas inte användning av
- 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.
.update
table
TableName på IDColumnName [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.
- Till exempel rekommenderas inte användning av
take
operator,sample
operator,rand
funktion och andra sådana operatorer eftersom dessa operatorer inte är deterministiska.
- Till exempel rekommenderas inte användning av
- 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 true returnerar 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 Code
Medarbetare bort och rader med Code
MedarbetareochColor
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.
Relaterat innehåll
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för