Befehl ".replace extents"
Dieser Befehl wird im Kontext einer bestimmten Datenbank ausgeführt. Sie verschiebt die angegebenen Blöcke aus ihren Quelltabellen in die Zieltabelle und löscht dann die angegebenen Blöcke aus der Zieltabelle. Alle Drop- und Move-Vorgänge werden in einer einzelnen Transaktion ausgeführt.
Hinweis
Datenshards werden als Blöcke bezeichnet, und alle Befehle verwenden "extent" oder "extents" als Synonym. Weitere Informationen zu Blöcken finden Sie unter Übersicht über Blöcke (Datenshards).
Berechtigungen
Sie müssen mindestens über die Berechtigungen Table Admin für die Quell- und Zieltabellen verfügen.
Beschränkungen
- Sowohl Quell- als auch Zieltabellen müssen sich in der Kontextdatenbank befinden.
- Es wird erwartet, dass alle durch extentsToDropQuery angegebenen Blöcke zur Zieltabelle gehören.
- Es wird erwartet, dass alle Spalten in den Quelltabellen in der Zieltabelle mit demselben Namen und Datentyp vorhanden sind.
- Wenn die Zieltabelle eine Quelltabelle einer materialisierten Sicht ist, schlägt der Befehl möglicherweise fehl, da die materialisierte Sicht die Datensätze in den verschobenen Blöcken nicht verarbeitet. Weitere Details finden Sie auf der Seite einschränkungen für materialisierte Ansichten . Sie können diesen Fehler umgehen, indem Sie während des Verschiebungsbefehls eine neue Erfassungszeit festlegen. Weitere Informationen finden Sie
setNewIngestionTime
unter unterstützte Eigenschaften.
Syntax
.replace
[async
] extents
table
in
DestinationTableName [ with
(
PropertyName=
PropertyValue [,
...])
] <|
{
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | Erforderlich | BESCHREIBUNG |
---|---|---|---|
async |
string |
Wenn angegeben, wird der Befehl asynchron ausgeführt. | |
DestinationTableName | string |
✔️ | Der Name der Tabelle, in die die Blöcke verschoben werden sollen. |
FromDate | datetime |
Das Startdatum des Abfragefensters. | |
Conversions.todate | datetime |
Das Enddatum des Abfragefensters. | |
PropertyName, PropertyValue | string |
Mindestens eine unterstützte Eigenschaft. | |
ExtentsToDropQuery | string |
✔️ | Die Ergebnisse dieser Abfrage geben die Bereichs-IDs an, die aus der Zieltabelle gelöscht werden sollen. Sollte ein Recordset mit einer Spalte namens "ExtentId" zurückgeben. |
ExtentsToMoveQuery | string |
✔️ | Die Ergebnisse dieser KQL-Abfrage (Kusto-Abfragesprache) geben die Quelltabellen und die Bereichs-IDs an, die in die Zieltabelle verschoben werden sollen. Sollte ein Recordset mit spalten namens "ExtentId" und "TableName" zurückgeben. |
Unterstützte Eigenschaften
Eigenschaftenname | type | Erforderlich | BESCHREIBUNG |
---|---|---|---|
setNewIngestionTime |
bool |
Wenn dieser Wert auf true festgelegt ist, wird allen Datensätzen in zu verschiebenden Blöcken eine neue Erfassungszeit zugewiesen. Dies ist nützlich, wenn Datensätze von Workloads verarbeitet werden sollen, die von Datenbankcursoren abhängen, z. B. materialisierte Sichten und fortlaufender Datenexport. |
|
extentCreatedOnFrom |
datetime |
✔️ | Anwenden auf Blöcke, die nach diesem Zeitpunkt erstellt wurden. |
extentCreatedOnTo |
datetime |
✔️ | Anwenden auf Blöcke, die vor diesem Zeitpunkt erstellt wurden. |
Hinweis
Legen Sie zur Verbesserung der Leistung die Parameter extentCreatedOnFrom und extentCreatedOnTo auf den kleinsten möglichen Bereich fest.
Gibt zurück
Wenn der Befehl synchron ausgeführt wird, wird eine Tabelle mit dem folgenden Schema zurückgegeben.
Ausgabeparameter | type | BESCHREIBUNG |
---|---|---|
OriginalExtentId | string |
Ein eindeutiger Bezeichner (GUID) für den ursprünglichen Bereich in der Quelltabelle, der in die Zieltabelle verschoben wurde, oder den Betreffenden in der Zieltabelle, der gelöscht wurde. |
ResultExtentId | string |
Ein eindeutiger Bezeichner (GUID) für den Ergebnisbereich, der aus der Quelltabelle in die Zieltabelle verschoben wurde. Leer, wenn der Umfang aus der Zieltabelle gelöscht wurde. Bei Fehler: "Failed". |
Details | string |
Enthält die Fehlerdetails, wenn der Vorgang fehlschlägt. |
Wenn der Befehl asynchron ausgeführt wird, wird eine Vorgangs-ID (GUID) zurückgegeben. Überwachen Sie die status des Vorgangs mit dem Befehl .show operations, und rufen Sie die Ergebnisse einer erfolgreichen Ausführung mit dem Befehl .show-Vorgangsdetails ab.
Hinweis
Der Befehl schlägt fehl, wenn von der ExtentsToDropQuery-Abfrage zurückgegebene Blöcke in der Zieltabelle nicht vorhanden sind. Dies kann der Fall sein, wenn die Blöcke zusammengeführt wurden, bevor der Replace-Befehl ausgeführt wurde. Um sicherzustellen, dass der Befehl bei fehlenden Blöcken fehlschlägt, überprüfen Sie, ob die Abfrage die erwarteten ExtentIds zurückgibt. Beispiel 1 unten schlägt fehl, wenn der zu löschende Umfang in der Tabelle MyOtherTable nicht vorhanden ist. Beispiel Nr. 2 ist jedoch erfolgreich, auch wenn der zu löschende Bereich nicht vorhanden ist, da die zu löschende Abfrage keine Bereichs-IDs zurückgibt.
Beispiele
Verschieben aller Blöcke in einem angegebenen Erstellungszeitbereich aus zwei Tabellen
Verschieben Sie alle Blöcke aus zwei spezifischen Tabellen (MyTable1
, ) in einem angegebenen Erstellungszeitbereich in die TabelleMyOtherTable
, und löschen Sie alle Blöcke in MyOtherTable
markiert mit drop-by:MyTag
MyTable2
:
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents where tags has 'drop-by:MyTag'
},
{
.show tables (MyTable1,MyTable2) extents
}
Beispielausgabe
OriginalExtentId | ResultExtentId | Details |
---|---|---|
e133f050-a1e2-4dad-8552-1f5cf47cab69 | 0d96ab2d-9dd2-4d2c-a45e-b24c65aa6687 | |
cdbeb35b-87ea-499f-b545-defbae091b57 | a90a303c-8a14-4207-8f35-d8ea94ca45be | |
4fcb4598-9a31-4614-903c-0c67c286da8c | 97aafea1-59ff-4312-b06b-08f42187872f | |
2dfdef64-62a3-4950-a130-96b5b1083b5a | 0fb7f3da-5e28-4f09-a000-e62eb41592df |
Verschieben aller Blöcke in einem angegebenen Erstellungszeitbereich von einer Tabelle in eine andere, Löschen eines bestimmten Bereichs
Verschieben Sie alle Blöcke in einem angegebenen Erstellungszeitbereich von einer bestimmten Tabelle (MyTable1
) in eine Tabelle MyOtherTable
, und löschen Sie einen bestimmten Bereich in MyOtherTable
anhand der ID:
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
print ExtentId = "2cca5844-8f0d-454e-bdad-299e978be5df"
},
{
.show table MyTable1 extents
}
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents
| where ExtentId == guid(2cca5844-8f0d-454e-bdad-299e978be5df)
},
{
.show table MyTable1 extents
}
Implementieren einer idempotenten Logik
Implementieren Sie eine idempotente Logik, damit Kusto Blöcke nur dann aus der Tabelle t_dest
löscht, wenn es Blöcke gibt, die von Tabelle zu Tabelle t_source
t_dest
verschoben werden können:
.replace async extents in table t_dest with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
let any_extents_to_move = toscalar(
t_source
| where extent_tags() has 'drop-by:blue'
| summarize count() > 0
);
let extents_to_drop =
t_dest
| where any_extents_to_move and extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id()
;
extents_to_drop
},
{
let extents_to_move =
t_source
| where extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id(), TableName = 't_source'
;
extents_to_move
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für