Freigeben über


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_destgibt:

.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
}