Erfassen aus Abfrage (.set, .append, .set-or-append, .set-or-replace)
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Diese Befehle führen eine Abfrage oder einen Verwaltungsbefehl aus und nehmen die Ergebnisse der Abfrage in eine Tabelle ein. Der Unterschied zwischen diesen Befehlen besteht darin, wie vorhandene oder nicht vorhandene Tabellen und Daten behandelt werden.
Get-Help | Wenn die Tabelle vorhanden ist | Wenn die Tabelle nicht vorhanden ist |
---|---|---|
.set |
Der Befehl schlägt fehl. | Die Tabelle wird erstellt, und die Daten werden erfasst. |
.append |
Daten werden an die Tabelle angehängt. | Der Befehl schlägt fehl. |
.set-or-append |
Daten werden an die Tabelle angehängt. | Die Tabelle wird erstellt, und die Daten werden erfasst. |
.set-or-replace |
Daten ersetzen die Daten in der Tabelle. | Die Tabelle wird erstellt, und die Daten werden erfasst. |
Informationen zum Abbrechen eines Abrufs aus dem Abfragebefehl finden Sie unter cancel operation
.
Hinweis
Bei der Erfassung aus der Abfrage handelt es sich um eine direkte Aufnahme. Dies schließt keine automatischen Wiederholungen ein. Automatische Wiederholungen stehen beim Aufnehmen über den Datenverwaltungsdienst zur Verfügung. Verwenden Sie das Übersichtsdokument zum Aufnehmen, um zu entscheiden, welche Option für die Aufnahme am besten für Ihr Szenario geeignet ist.
Berechtigungen
Um unterschiedliche Aktionen für eine Tabelle auszuführen, sind bestimmte Berechtigungen erforderlich:
- Zum Hinzufügen von Zeilen zu einer vorhandenen Tabelle mit dem
.append
Befehl benötigen Sie mindestens die Berechtigungen "Table Ingestor". - Um eine neue Tabelle mit den verschiedenen
.set
Befehlen zu erstellen, benötigen Sie mindestens berechtigungen für Datenbankbenutzer. - Um Zeilen in einer vorhandenen Tabelle mithilfe des
.set-or-replace
Befehls zu ersetzen, benötigen Sie mindestens die Berechtigungen des Tabellenadministrators.
Weitere Informationen zu Berechtigungen finden Sie unter Kusto rollenbasierte Zugriffssteuerung.
Syntax
(.set
.append
.set-or-replace
| | .set-or-append
| ) [async
] tableName [with
(
propertyName =
propertyValue [,
...]] <|
)
queryOrCommand
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
async | string |
Wenn angegeben, gibt der Befehl sofort zurück und setzt die Aufnahme im Hintergrund fort. Verwenden Sie den zurückgegebenen OperationId .show operations Befehl, um den Status und die Ergebnisse des Aufnahmeabschlusses abzurufen. |
|
tableName | string |
✔️ | Der Name der Tabelle, in die Daten aufgenommen werden sollen. Der TableName ist immer im Kontext mit der Datenbank verknüpft. |
propertyName, propertyValue | string |
Mindestens eine unterstützte Aufnahmeeigenschaften, die zum Steuern des Aufnahmevorgangs verwendet werden. | |
queryOrCommand | string |
✔️ | Der Text einer Abfrage oder eines Verwaltungsbefehls, dessen Ergebnisse als Daten zum Aufnehmen verwendet werden. Nur .show Verwaltungsbefehle werden unterstützt. |
Leistungstipps
- Legen Sie die
distributed
Eigenschaft auftrue
fest, wenn die menge der von der Abfrage erzeugten Daten groß ist, 1 GB überschreitet und keine Serialisierung erfordert. Anschließend können mehrere Knoten die Ausgabe parallel erzeugen. Verwenden Sie dieses Flag nicht, wenn Abfrageergebnisse klein sind, da es möglicherweise viele kleine Datenshards ohne Weiteres generiert. - Die Datenaufnahme ist ein ressourcenintensiver Vorgang, der sich auf gleichzeitige Aktivitäten in der Datenbank auswirken kann, einschließlich der Ausführung von Abfragen. Vermeiden Sie die gleichzeitige Ausführung zu vieler Aufnahmebefehle.
- Beschränken Sie die Daten für die Aufnahme auf weniger als 1 GB pro Aufnahmevorgang. Verwenden Sie bei Bedarf mehrere Aufnahmebefehle.
Unterstützte Erfassungseigenschaften
Eigenschaft | Typ | Beschreibung |
---|---|---|
distributed |
bool |
Wenn true der Befehl von allen Knoten aufgenommen wird, die die Abfrage parallel ausführen. Der Standardwert ist false . Lesen Sie Leistungstipps. |
creationTime |
string |
Der als ISO8601-Zeichenfolge formatierte datetime-Wert, der zum Zeitpunkt der Erstellung der erfassten Datenerweiterungen verwendet werden soll. Wenn keine Angabe erfolgt, wird now() verwendet. Achten Sie bei Angabe eines Werts darauf, dass die Eigenschaft Lookback in der effektiven Richtlinie für die Zusammenführung von Blöcken der Zieltabelle auf den angegebenen Wert abgestimmt ist. |
extend_schema |
bool |
Wenn true , kann der Befehl das Schema der Tabelle erweitern. Der Standardwert ist false . Diese Option betrifft nur .append -, .set-or-append - und set-or-replace -Befehle. Für diese Option sind mindestens Tabellenadministratorberechtigungen erforderlich. |
recreate_schema |
bool |
Wenn true , kann der Befehl das Schema der Tabelle neu erstellen. Der Standardwert ist false . Diese Option betrifft nur den Befehl .set-or-replace . Diese Option hat Vorrang vor der extend_schema Eigenschaft, wenn beide festgelegt sind. Für diese Option sind mindestens Tabellenadministratorberechtigungen erforderlich. |
folder |
string |
Der Ordner, der der Tabelle zugewiesen werden soll. Wenn die Tabelle bereits vorhanden ist, überschreibt diese Eigenschaft den Ordner der Tabelle. |
ingestIfNotExists |
string |
Wenn angegeben, schlägt die Aufnahme fehl, wenn die Tabelle bereits Daten mit einem ingest-by: Tag mit demselben Wert markiert hat. Weitere Informationen finden Sie unter ingest-by: Tags. |
policy_ingestiontime |
bool |
Wenn true die Zeitaufnahmerichtlinie in der Tabelle aktiviert ist. Der Standardwert ist true . |
tags |
string |
Eine JSON-Zeichenfolge, die eine Liste von Tags darstellt, die dem erstellten Umfang zugeordnet werden sollen. |
docstring |
string |
Eine Beschreibung, die zum Dokumentieren der Tabelle verwendet wird. |
persistDetails |
Ein boolescher Wert, der, falls angegeben, angibt, dass der Befehl die detaillierten Ergebnisse für den Abruf durch den Befehl ".show operation details " beibehalten soll. Wird standardmäßig auf false festgelegt. |
with (persistDetails=true) |
Schemaüberlegungen
.set-or-replace
behält das Schema bei, es sei denn, eine derextend_schema
Eigenschaften fürrecreate_schema
die Aufnahme ist auftrue
..set-or-append
und.append
Befehle behalten das Schema bei, es sei denn, dieextend_schema
Aufnahmeeigenschaft ist auftrue
.- Der Abgleich mit dem Resultsetschema der Zieltabelle basiert auf den Spaltentypen. Es erfolgt kein Abgleichen der Spaltennamen. Stellen Sie sicher, dass sich die Spalten des Abfrageergebnisschemas in der gleichen Reihenfolge wie die Tabelle befinden, andernfalls werden die Daten in die falschen Spalten aufgenommen.
Achtung
Wenn das Schema geändert wird, erfolgt es in einer separaten Transaktion vor der tatsächlichen Datenaufnahme. Dies bedeutet, dass das Schema auch dann geändert werden kann, wenn die Daten nicht aufgenommen werden.
Zeichenbeschränkung
Der Befehl schlägt fehl, wenn die Abfrage einen Entitätsnamen mit dem $
Zeichen generiert. Die Entitätsnamen müssen den Benennungsregeln entsprechen, sodass das $
Zeichen entfernt werden muss, damit der Aufnahmebefehl erfolgreich ausgeführt werden kann.
In der folgenden Abfrage generiert der search
Operator beispielsweise eine Spalte $table
. Zum Speichern der Abfrageergebnisse verwenden Sie die Projektumbenennung , um die Spalte umzubenennen.
.set Texas <| search State has 'Texas' | project-rename tableName=$table
Beispiele
Erstellen Sie eine neue Tabelle namens RecentErrors in der Datenbank, die dasselbe Schema wie LogsTable hat und alle Fehlerdatensätze der letzten Stunde enthält.
.set RecentErrors <|
LogsTable
| where Level == "Error" and Timestamp > now() - time(1h)
Erstellen Sie eine neue Tabelle mit dem Namen "OldExtents" in der Datenbank mit einer einzelnen Spalte, "ExtentId", und enthält die Umfangs-IDs aller Ausdehnungen in der Datenbank, die vor mehr als 30 Tagen erstellt wurden. Die Datenbank enthält eine Tabelle namens „MyExtents“. Da das Dataset voraussichtlich größer als 1 GB (mehr als ~1 Millionen Zeilen) sein soll, verwenden Sie das verteilte Flag.
.set async OldExtents with(distributed=true) <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Fügen Sie Daten an die vorhandene Tabelle „OldExtents“ in der aktuellen Datenbank an, die eine einzige Spalte namens „ExtentId“ hat und die Block-IDs aller Blöcke in der Datenbank enthält, die vor mehr als 30 Tagen erstellt wurden.
Markieren Sie den neue Block mit den Tags tagA
und tagB
, basierend auf der vorhandenen Tabelle „MyExtents“.
.append OldExtents with(tags='["TagA","TagB"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Fügen Sie Daten an die Tabelle „OldExtents“ in der aktuellen Datenbank an, oder erstellen Sie die Tabelle, wenn sie noch nicht vorhanden ist. Kennzeichnen Sie den neuen Block mit ingest-by:myTag
. Führen Sie diesen Schritt nur aus, wenn die Tabelle noch keinen mit ingest-by:myTag
gekennzeichneten Block enthält, basierend auf der vorhandenen Tabelle „MyExtents“.
.set-or-append async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Ersetzen Sie die Daten in der Tabelle „OldExtents“ in der aktuellen Datenbank an, oder erstellen Sie die Tabelle, wenn sie noch nicht vorhanden ist. Kennzeichnen Sie den neuen Block mit ingest-by:myTag
.
.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Fügen Sie Daten an die Tabelle "OldExtents" in der aktuellen Datenbank an, und legen Sie dabei die Erstellungszeit auf ein bestimmtes Datum in der Vergangenheit fest.
.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Zurückgegebene Ausgabe
Gibt Informationen zu den Erweiterungen zurück, die aufgrund des .set
- oder .append
-Befehls erstellt wurden.
Beispielausgabe
ExtentId | OriginalSize | ExtentSize | CompressedSize | IndexSize | RowCount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1.291 | 5882 | 1568 | 4314 | 10 |