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 MyOtherTable
e 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 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 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
}