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
] extents
table
in
DestinationTableName [ 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 MyOtherTable
e 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 MyOtherTable
e 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_dest
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
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per