Befehl „.update table“
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Der .update table
Befehl führt Datenaktualisierungen in einer angegebenen Tabelle aus, indem Datensätze atomar gelöscht und angefügt werden.
Warnung
Dieser Befehl kann nicht wiederhergestellt werden.
Hinweis
Wenn Sie den .update table
Befehl für eine Tabelle ausführen, die die Quelle für eine Updaterichtlinie ist, löst der .update table
Befehl diese Updaterichtlinien aus, für die die Tabelle geändert wird, die Updaterichtlinienquelle ist.
Sie können bis zu 5 Millionen Datensätze in einem einzigen Befehl löschen.
Berechtigungen
Sie müssen mindestens über Die Berechtigungen des Tabellenadministrators verfügen, um diesen Befehl auszuführen.
Syntax
Hinweis
Die vereinfachte Syntax, die während der Vorschau verfügbar war, ist veraltet.
Erfahren Sie mehr über Syntaxkonventionen.
.update
[async]
table
TableName DeleteIdentifier AppendIdentifier [with
(
propertyName =
delete
propertyValue ] )
append
<|
let
DeleteIdentifier=
DeletePredicate;
let
AppendIdentifier=
AppendPredicate;
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
async | string |
Wenn angegeben, gibt an, dass der Befehl im asynchronen Modus ausgeführt wird. | |
TableName | string |
✔️ | Der Name der zu aktualisierenden Tabelle. |
DeleteIdentifier | string |
✔️ | Der Bezeichnername, der verwendet wird, um das Lösch-Prädikat anzugeben, das auf die aktualisierte Tabelle angewendet wird. |
DeletePredicate | string |
✔️ | Der Text einer Abfrage, deren Ergebnisse als Daten zum Löschen verwendet werden. Das Prädikat hat die gleichen Einschränkungen wie das Soft delete-Prädikat. |
AppendIdentifier | string |
✔️ | Der Bezeichnername, der verwendet wird, um das Anfüge-Prädikat anzugeben, das auf die aktualisierte Tabelle angewendet wurde. |
AppendPredicate | string |
✔️ | Der Text einer Abfrage, deren Ergebnisse als Anfügedaten verwendet werden. |
Wichtig
- Sowohl Lösch- als auch Anfügeprädikate können keine Remoteentitäten, dbübergreifende und clusterübergreifende Entitäten verwenden. Prädikate können nicht auf eine externe Tabelle verweisen oder den
externaldata
Operator verwenden. - Anfüge- und Löschabfragen werden voraussichtlich deterministische Ergebnisse erzeugen. Nicht deterministische Abfragen können zu unerwarteten Ergebnissen führen. Eine Abfrage ist deterministisch, wenn sie nur dann die gleichen Daten zurückgeben würde, wenn sie mehrmals ausgeführt wird.
- Die Verwendung von
take
Operatoren,sample
Operatoren,rand
Funktionen und anderen solchen Operatoren wird beispielsweise nicht empfohlen, da diese Operatoren nicht deterministisch sind.
- Die Verwendung von
- Abfragen können innerhalb der
update
Ausführung mehrmals ausgeführt werden. Wenn die Zwischenabfrageergebnisse inkonsistent sind, kann der Aktualisierungsbefehl unerwartete Ergebnisse erzeugen.
Unterstützte Eigenschaften
Name | Typ | Beschreibung |
---|---|---|
whatif | bool | Wenn true , gibt die Anzahl der Datensätze zurück, die in jeder Shard angefügt/ gelöscht werden, ohne Datensätze anzufügen/ zu löschen. Der Standardwert ist false . |
verteilt | bool | Wenn true der Befehl von allen Knoten aufgenommen wird, die die Abfrage parallel ausführen. Der Standardwert ist false . Lesen Sie Leistungstipps. |
Wichtig
Es wird empfohlen whatif
, den Modus zuerst auszuführen, bevor das Update ausgeführt wird, um die Prädikate vor dem Löschen oder Anfügen von Daten zu überprüfen.
Gibt zurück
Das Ergebnis des Befehls ist eine Tabelle, in der jeder Datensatz ein Ausmaß darstellt, das entweder mit neuen Daten erstellt oder Datensätze gelöscht wurden.
Name | Typ | Beschreibung |
---|---|---|
Table | string |
Die Tabelle, in der der Umfang erstellt oder gelöscht wurde. |
Aktion | string |
Erstellen oder Löschen abhängig von der Aktion, die im Umfang ausgeführt wurde. |
ExtentId | guid |
Der eindeutige Bezeichner für den Umfang, der vom Befehl erstellt oder gelöscht wurde. |
RowCount | long |
Die Anzahl der zeilen, die im angegebenen Umfang durch den Befehl erstellt oder gelöscht wurden. |
Auswählen zwischen .update table
ansichten und materialisierter Ansichten
Es gibt Szenarien, in denen Sie entweder den .update table
Befehl oder eine materialisierte Ansicht verwenden können, um dasselbe Ziel in einer Tabelle zu erreichen. Beispielsweise könnte eine materialisierte Ansicht verwendet werden, um die neueste Version jedes Datensatzes beizubehalten, oder ein Update könnte verwendet werden, um Datensätze zu aktualisieren, wenn eine neue Version verfügbar ist.
Verwenden Sie die folgenden Richtlinien, um zu entscheiden, welche Methode verwendet werden soll:
- Wenn Ihr Aktualisierungsmuster von materialisierten Ansichten nicht unterstützt wird, verwenden Sie den Befehl "Aktualisieren".
- Wenn die Quelltabelle über ein hohes Aufnahmevolumen verfügt, jedoch nur wenige Updates, kann die Verwendung des Aktualisierungsbefehls leistungsstärker sein und weniger Cache oder Speicher verbrauchen als materialisierte Ansichten. Dies liegt daran, dass materialisierte Ansichten alle aufgenommenen Daten neu verarbeiten müssen, was weniger effizient ist als die Identifizierung der einzelnen Datensätze, die basierend auf den Anfüge- oder Lösch-Prädikaten aktualisiert werden sollen.
- Materialisierte Ansichten sind eine vollständig verwaltete Lösung. Die materialisierte Ansicht wird einmal definiert, und die Materialisierung erfolgt im Hintergrund durch das System. Der Updatebefehl erfordert einen koordinierten Prozess (z . B. Azure Data Factory, Logic Apps, Power Automate und andere), der den Updatebefehl bei jeder Aktualisierung explizit ausführt. Wenn materialisierte Ansichten für Ihren Anwendungsfall ausreichend funktionieren, erfordert die Verwendung materialisierter Ansichten weniger Verwaltung und Wartung.
Leistungstipps
- Eine Datenerfassung ist ein ressourcenintensiver Vorgang, der sich auf gleichzeitige Aktivitäten im Cluster auswirken kann, so auch auf das Ausführen von Abfragen. Es wird empfohlen, die folgenden ressourcenintensiven Aktionen zu vermeiden: Gleichzeitiges Ausführen vieler
.update
Befehle und die intensive Verwendung der verteilten Eigenschaft. - Beschränken Sie die Anfügedaten auf weniger als 1 GB pro Vorgang. Verwenden Sie bei Bedarf mehrere Aktualisierungsbefehle.
- Legen Sie das
distributed
Flag nur dann festtrue
, wenn die Menge der von der Abfrage erzeugten Daten groß ist, 1 GB überschreitet und keine Serialisierung erfordert: Mehrere Knoten können dann die Ausgabe parallel erzeugen. Verwenden Sie dieses Flag nicht, wenn Abfrageergebnisse klein sind, da es möglicherweise viele kleine Datenshards ohne Weiteres generiert.
Beispiele
Für die Beispiele verwenden wir die folgende Tabelle:
.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])
Mit diesem Befehl wird eine Tabelle mit 100 Datensätzen erstellt, beginnend mit:
Kennung | Code | Color |
---|---|---|
1 | Employee | Blau |
2 | Kreditor | Grau |
3 | Employee | Red |
4 | Kreditor | Blau |
5 | Employee | Grau |
6 | Kreditor | Red |
6 | Employee | Blau |
Aktualisieren einer einzelnen Spalte in einer Zeile
Im folgenden Beispiel wird eine einzelne Spalte in einer einzelnen Zeile aktualisiert:
.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";
Beachten Sie, dass whatif
auf "true" festgelegt ist. Nach dieser Abfrage ist die Tabelle unverändert, der Befehl gibt jedoch zurück, dass es eine Erweiterung mit einer gelöschten Zeile und einer neuen Erweiterung mit einer Zeile geben würde.
Mit dem folgenden Befehl wird das Update tatsächlich ausgeführt:
.update table Employees delete D append A <|
let D = Employees
| where Id==3;
let A = Employees
| where Id==3
| extend Color="Orange";
Aktualisieren einer einzelnen Spalte in mehreren Zeilen
Im folgenden Beispiel wird für eine einzelne Spalte Color
der Wert " Grün " in den Zeilen mit dem Wert Blau aktualisiert.
.update table Employees delete D append A <|
let D = Employees
| where Code=="Employee"
| where Color=="Blue";
let A = D
| extend Color="Green";
Hier haben wir den Löschbezeichner in der Definition für das Anfüge-Prädikat wiederverwendet.
Aktualisieren mehrerer Spalten in mehreren Zeilen
Im folgenden Beispiel werden mehrere Spalten in allen Zeilen mit Farbe Grau aktualisiert.
.update table Employees delete D append A <|
let D = Employees
| where Color=="Gray";
let A = D
| extend Code=strcat("ex-", Code)
| extend Color="";
Aktualisieren von Zeilen mithilfe einer anderen Tabelle (Referenzwerte)
In diesem Beispiel besteht der erste Schritt darin, die folgende Zuordnungstabelle zu erstellen:
.set-or-replace ColorMapping <|
datatable(OldColor:string, NewColor:string)[
"Red", "Pink",
"Blue", "Purple",
"Gray", "LightGray",
"Orange", "Yellow",
"Green", "AppleGreen"
]
Diese Zuordnungstabelle wird dann verwendet, um einige Farben in der ursprünglichen Tabelle zu aktualisieren:
.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
Aktualisieren von Zeilen mit einer Datentabelle
Manchmal werden zu aktualisierende Werte bekannt, ohne in einer Tabelle gespeichert zu werden, und der Datentabellenoperator kann hilfreich sein:
.update table Employees delete D append A <|
let A = datatable(Id:long, Code:string, Color:string)[
1, "Customer", "Purple",
2, "Customer", "Magenta",
3, "Customer", "Turquoise",
];
let D = Employees
| join kind=leftsemi A on Id
| where true;
Aktualisieren von Zeilen mit einer Stagingtabelle
Ein beliebtes Muster besteht darin, zuerst Daten in einer Stagingtabelle zu landen, bevor die Haupttabelle aktualisiert wird.
Der erste Befehl erstellt eine Stagingtabelle:
.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])
Der nächste Befehl aktualisiert die Haupttabelle mit den Daten in der Stagingtabelle:
.update table Employees delete D append A <|
let A = MyStagingTable;
let D = Employees
| join kind=leftsemi MyStagingTable on Id
| where true;
Einige Datensätze in der Stagingtabelle waren in der Haupttabelle (d. h. hatte Id>100
) nicht vorhanden, wurden aber noch in die Haupttabelle eingefügt (Upsert-Verhalten).
Zusammengesetzte Schlüssel
Der erste Befehl erstellt eine Tabelle mit zusammengesetzten Schlüsseln:
.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"
]
Der nächste Befehl aktualisiert einen bestimmten Datensatz mithilfe der erweiterten Syntax:
.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";