Condividi tramite


Comando .replace extents

Si applica a: ✅Azure Esplora dati

Questo comando elimina e sposta extent in una singola transazione all'interno del contesto di un database specifico. Il comando elimina tutti gli extent specificati dalla tabella di destinazione e sposta gli extent specificati dalle tabelle di origine alla tabella di destinazione.

Nota

Le partizioni di dati sono denominate extent e tutti i comandi usano "extent" o "extent" come sinonimo. Per altre informazioni sugli extent, vedere Panoramica degli extent (partizioni di dati).

Autorizzazioni

È necessario disporre almeno delle autorizzazioni di amministratore tabella per le tabelle di origine e di destinazione.

Restrizioni

  • Sia le tabelle di origine che di destinazione devono trovarsi nel database di contesto.
  • Tutti gli extent specificati da ExtentsToDropQuery devono appartenere alla tabella di destinazione.
  • Tutte le colonne nelle tabelle di origine dovrebbero esistere nella tabella di destinazione con lo stesso nome e tipo di dati.
  • Se la tabella di destinazione è una tabella di origine di una vista materializzata, il comando potrebbe non riuscire perché la vista materializzata non può elaborare i record negli extent spostati. Per altri dettagli, vedere la pagina delle limitazioni delle visualizzazioni materializzate. È possibile risolvere questo errore impostando un nuovo tempo di inserimento durante il comando di spostamento. Vedere setNewIngestionTime nelle proprietà supportate.

Sintassi

.replace[async] extents in table DestinationTableName [ with (PropertyName = PropertyValue [, ...]] <|{)ExtentsToDropQuery},{ExtentsToMoveQuery}

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
async string Se specificato, il comando viene eseguito in modo asincrono.
DestinationTableName string ✔️ Nome della tabella in cui spostare gli extent.
FromDate datetime Data di inizio della finestra di query.
ToDate datetime Data di fine della finestra di query.
PropertyName, PropertyValue string Una o più proprietà supportate.
ExtentsToDropQuery string ✔️ I risultati di questa query devono includere la ExtentId colonna contenente gli ID extent da rimuovere dalla tabella di destinazione.
ExtentsToMoveQuery string ✔️ I risultati di questa query devono includere le ExtentId colonne e TableName che contengono le tabelle di origine e gli ID extent da spostare nella tabella di destinazione.

Proprietà supportate

Nome proprietà Type Obbligatorio Descrizione
setNewIngestionTime bool Se impostato su true, viene assegnato un nuovo tempo di inserimento a tutti i record in extent spostati. Ciò è utile quando i record vengono elaborati da carichi di lavoro che dipendono dai cursori del database, ad esempio viste materializzate ed esportazione continua dei dati.
extentCreatedOnFrom datetime ✔️ Applicare gli extent creati dopo questo punto nel tempo.
extentCreatedOnTo datetime ✔️ Applicare gli extent creati prima di questo punto nel tempo.

Nota

Per prestazioni migliori, impostare extentCreatedOnFrom e extentCreatedOnTo parametri per l'intervallo più piccolo possibile.

Valori restituiti

Quando il comando viene eseguito in modo sincrono, viene restituita una tabella con lo schema seguente.

Parametro di output Tipo Descrizione
OriginalExtentId string Identificatore univoco (GUID) per l'extent originale nella tabella di origine spostata nella tabella di destinazione o l'extent nella tabella di destinazione eliminata.
ResultExtentId string Identificatore univoco (GUID) per l'extent del risultato spostato dalla tabella di origine alla tabella di destinazione. Vuoto, se l'extent è stato eliminato dalla tabella di destinazione. In caso di errore: "Non riuscito".
Dettagli string Include i dettagli dell'errore se l'operazione ha esito negativo.

Quando il comando viene eseguito in modo asincrono, viene restituito un ID operazione (GUID). Monitorare lo stato dell'operazione con il comando operazioni .show e recuperare i risultati di un'esecuzione riuscita con il comando .show operation details .

Nota

Il comando avrà esito negativo se gli extent restituiti dalla query ExtentsToDropQuery non esistono nella tabella di destinazione. Ciò può verificarsi se gli extent sono stati uniti prima dell'esecuzione del comando replace. Per assicurarsi che il comando abbia esito negativo negli extent mancanti, verificare che la query restituisca gli ExtentId previsti. Il primo esempio avrà esito negativo se l'extent da eliminare non esiste nella tabella MyOtherTable. Il secondo esempio, tuttavia, avrà esito positivo anche se l'extent da eliminare non esiste, poiché la query da eliminare non ha restituito alcun ID extent.

Esempi

Spostare tutti gli extent in un intervallo di tempo di creazione specificato da due tabelle

Spostare tutti gli extent da due tabelle specifiche (MyTable1, MyTable2) in un intervallo di tempo di creazione specificato alla tabella MyOtherTablee eliminare tutti gli extent in MyOtherTable contrassegnati con 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
    }

Output di esempio

OriginalExtentId ResultExtentId Dettagli
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

Spostare tutti gli extent in un intervallo di tempo di creazione specificato da una tabella a un'altra, eliminare un extent specifico

Spostare tutti gli extent in un intervallo di tempo di creazione specificato da una tabella specifica (MyTable1) alla tabella MyOtherTablee eliminare un extent specifico in MyOtherTable, in base al relativo 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 
    }

Implementare una logica idempotente

Implementare una logica idempotente in modo che Kusto elimina gli extent dalla tabella t_dest solo se sono presenti extent per passare dalla tabella t_source alla tabella t_dest:

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