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] extentstableinDestinationTableName [ 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 truefestgelegt 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:MyTagMyTable2:

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