Freigeben über


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 <|
letDeleteIdentifier= DeletePredicate;
letAppendIdentifier= 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.
  • 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 trueder 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 fest true , 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";