Comando .replace extents

Questo comando viene eseguito nel contesto di un database specifico. Sposta gli extent specificati dalle tabelle di origine nella tabella di destinazione e quindi elimina gli extent specificati dalla tabella di destinazione. Tutte le operazioni di eliminazione e spostamento vengono eseguite in una singola transazione.

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 di Extents (partizioni di dati).

Autorizzazioni

È necessario disporre almeno delle autorizzazioni Table Amministrazione 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 devono 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 visualizzazione materializzata non elabora i record negli extent spostati. Vedere altri dettagli nella pagina 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] extentstableinDestinationTableName [ PropertyName=PropertyValue [,(with ...])] <|{ExtentsToDropQuery},{ExtentsToMoveQuery}

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria 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 della query.
PropertyName, PropertyValue string Una o più proprietà supportate.
ExtentsToDropQuery string ✔️ I risultati di questa query specificano gli ID extent che devono essere eliminati dalla tabella di destinazione. Deve restituire un recordset con una colonna denominata "ExtentId".
ExtentsToMoveQuery string ✔️ I risultati di questa query di Linguaggio di query Kusto (KQL) specificano le tabelle di origine e gli ID extent da spostare nella tabella di destinazione. Deve restituire un recordset con colonne denominate "ExtentId" e "TableName".

Proprietà supportate

Nome proprietà Type Obbligatoria 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 devono essere elaborati dai carichi di lavoro che dipendono dai cursori del database, ad esempio viste materializzate ed esportazione continua dei dati.
extentCreatedOnFrom datetime ✔️ Applicare le estensioni create dopo questo momento.
extentCreatedOnTo datetime ✔️ Applicare su extent creati prima di questo momento.

Nota

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

Restituisce

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'estensione originale nella tabella di origine spostata nella tabella di destinazione o l'estensione nella tabella di destinazione eliminata.
ResultExtentId string Identificatore univoco (GUID) per l'extent di 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 . show operations e recuperare i risultati di un'esecuzione riuscita con il comando dettagli operazione .show .

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 di sostituzione. Per assicurarsi che il comando abbia esito negativo negli extent mancanti, verificare che la query restituisca gli ExtentId previsti. L'esempio #1 seguente avrà esito negativo se l'estensione da eliminare non esiste nella tabella MyOtherTable. L'esempio #2, tuttavia, avrà esito positivo anche se l'estensione da eliminare non esiste, poiché la query da eliminare non restituisce alcun ID di estensione.

Esempio

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 nella tabella MyOtherTablee eliminare tutti gli extent in MyOtherTable tag 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-b24c65a6687
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 i extent dalla tabella solo se sono presenti estensioni da tabella t_source a tabellat_destt_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
}