Befehl „.replace extents“
Gilt für: ✅Azure Data Explorer
Mit diesem Befehl wird das Ausmaß einer einzelnen Transaktion im Kontext einer bestimmten Datenbank abgelegt und verschoben. Der Befehl legt alle angegebenen Ausdehnungen aus der Zieltabelle ab und verschiebt angegebene Ausdehnungen aus Quelltabellen in die Zieltabelle.
Hinweis
Datenshards werden als Erweiterungen bezeichnet, und alle Befehle verwenden "extent" oder "extents" als Synonym. Weitere Informationen zu Ausmaßen finden Sie unter "Extents(Data Shards)" (Übersicht).
Berechtigungen
Sie müssen mindestens über Tabellenadministratorberechtigungen für die Quell- und Zieltabellen verfügen.
Beschränkungen
- Quell- und Zieltabellen müssen sich in der Kontextdatenbank befinden.
- Es wird erwartet, dass alle durch die ExtentsToDropQuery angegebenen Erweiterungen zur Zieltabelle gehören.
- Es wird erwartet, dass alle Spalten in den Quelltabellen in der Zieltabelle mit demselben Namen und Datentyp vorhanden sind.
- Wenn es sich bei der Zieltabelle um eine Quelltabelle einer materialisierten Ansicht handelt, schlägt der Befehl möglicherweise fehl, da die materialisierte Ansicht die Datensätze in den verschobenen Ausmaßen nicht verarbeiten kann. Weitere Details finden Sie auf der Seite mit den Einschränkungen für materialisierte Ansichten . Sie können diesen Fehler umgehen, indem Sie während des Bewegungsbefehls eine neue Aufnahmezeit festlegen. Siehe
setNewIngestionTime
in unterstützten Eigenschaften.
Syntax
.replace
[async
] extents
table
in
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...]] <|
{
)
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
async |
string |
Wenn angegeben, wird der Befehl asynchron ausgeführt. | |
DestinationTableName | string |
✔️ | Der Name der Tabelle, in die die Ausmaße verschoben werden sollen. |
FromDate | datetime |
Das Startdatum des Abfragefensters. | |
ToDate | datetime |
Enddatum des Abfragefensters. | |
PropertyName, PropertyValue | string |
Mindestens eine unterstützte Eigenschaft. | |
ExtentsToDropQuery | string |
✔️ | Die Ergebnisse dieser Abfrage müssen die ExtentId Spalte enthalten, die die Umfangs-IDs enthält, die aus der Zieltabelle entfernt werden sollen. |
ExtentsToMoveQuery | string |
✔️ | Die Ergebnisse dieser Abfrage müssen die ExtentId Und TableName Spalten enthalten, die die Quelltabellen und Umfangs-IDs enthalten, die in die Zieltabelle verschoben werden. |
Unterstützte Eigenschaften
Eigenschaftenname | Type | Erforderlich | Beschreibung |
---|---|---|---|
setNewIngestionTime |
bool |
Bei Festlegung auf true , wird allen Datensätzen, die verschoben werden, eine neue Aufnahmezeit zugewiesen. Dies ist nützlich, wenn Datensätze von Arbeitslasten verarbeitet werden, die von Datenbankcursorn abhängig sind, z . B. materialisierte Ansichten und fortlaufender Datenexport. |
|
extentCreatedOnFrom |
datetime |
✔️ | Wenden Sie nach diesem Zeitpunkt erstellte Erweiterungen an. |
extentCreatedOnTo |
datetime |
✔️ | Wenden Sie sich auf Soweit, die vor diesem Zeitpunkt erstellt wurden. |
Hinweis
Legen Sie für eine bessere 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 | Typ | Beschreibung |
---|---|---|
OriginalExtentId | string |
Ein eindeutiger Bezeichner (GUID) für das ursprüngliche Ausmaß in der Quelltabelle, die in die Zieltabelle verschoben wurde, oder das Ausmaß in der Zieltabelle, die gelöscht wurde. |
ResultExtentId | string |
Ein eindeutiger Bezeichner (GUID) für das Ergebnis, das aus der Quelltabelle in die Zieltabelle verschoben wurde. Leer, wenn der Umfang aus der Zieltabelle gelöscht wurde. Bei Einem Fehler: "Fehlgeschlagen". |
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 den Status des Vorgangs mit dem Befehl ".show operations " und rufen Sie die Ergebnisse einer erfolgreichen Ausführung mit dem Befehl ".show operation details " ab.
Hinweis
Der Befehl schlägt fehl, wenn die von der Abfrage "ExtentsToDropQuery " zurückgegebenen Erweiterungen in der Zieltabelle nicht vorhanden sind. Dies kann passieren, wenn die Erweiterungen zusammengeführt wurden, bevor der Ersetzungsbefehl ausgeführt wurde. Um sicherzustellen, dass der Befehl bei fehlenden Ausmaßen fehlschlägt, überprüfen Sie, ob die Abfrage die erwarteten ExtentIds zurückgibt. The first example will fail if the extent to drop doesn't exist in table MyOtherTable. Das zweite Beispiel ist jedoch erfolgreich, obwohl der Umfang des Ablegens nicht vorhanden ist, da die abzulegende Abfrage keine Erweiterungs-IDs zurückgegeben hat.
Beispiele
Verschieben aller Ausdehnungen in einem angegebenen Erstellungszeitbereich aus zwei Tabellen
Verschieben Sie alle Bereiche aus zwei bestimmten Tabellen (MyTable1
, MyTable2
) in einem angegebenen Erstellungszeitbereich in eine Tabelle MyOtherTable
, und legen Sie alle Ausdehnungen in MyOtherTable
markiert mit drop-by:MyTag
:
.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 Ausdehnungen in einem angegebenen Erstellungszeitbereich von einer Tabelle in eine andere, spezifische Abbruchweite
Verschieben Sie alle Ausdehnungen in einem angegebenen Erstellungszeitbereich von einer bestimmten Tabelle (MyTable1
) in eine Tabelle MyOtherTable
, und legen Sie ein bestimmtes Ausmaß in MyOtherTable
, anhand der ID ab:
.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 idempotent-Logik, sodass Kusto nur dann Ausdehnungen aus der Tabelle t_dest
abbricht, wenn es Verschiebungen von Tabelle t_source
zu Tabelle t_dest
gibt:
.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
}