Comando .replace extents
Aplica-se a: ✅Azure Data Explorer
Esse comando descarta e move extensões em uma única transação dentro do contexto de um banco de dados específico. O comando descarta todas as extensões especificadas da tabela de destino e move as extensões especificadas das tabelas de origem para a tabela de destino.
Observação
Os fragmentos de dados são chamados de extensões e todos os comandos usam "extensão" ou "extensões" como sinônimo. Para obter mais informações sobre extensões, consulte Visão geral de extensões (fragmentos de dados).
Permissões
Você deve ter pelo menos permissões de Administrador de Tabela para as tabelas de origem e destino.
Restrições
- As tabelas de origem e de destino devem estar no banco de dados de contexto.
- Espera-se que todas as extensões especificadas pelo ExtentsToDropQuery pertençam à tabela de destino.
- Espera-se que todas as colunas nas tabelas de origem existam na tabela de destino com o mesmo nome e tipo de dados.
- Se a tabela de destino for uma tabela de origem de uma exibição materializada, o comando poderá falhar, pois a exibição materializada não poderá processar os registros nas extensões movidas. Veja mais detalhes na página de limitações de exibições materializadas . Você pode contornar esse erro definindo um novo tempo de ingestão durante o comando move. Consulte
setNewIngestionTime
nas propriedades com suporte.
Sintaxe
.replace
[async
] extents
in
table
NomeDaTabelaDeDestino [ with
(
Nome_da_ =
propriedade Valor_da_propriedade [,
...]])
<|
{
ExtentsToDropQuery},{
ExtentsToMoveQuery}
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
async |
string |
Se especificado, o comando é executado de forma assíncrona. | |
Nome_da_tabela_de_destino | string |
✔️ | O nome da tabela para a qual mover as extensões. |
FromDate | datetime |
A data de início da janela de consulta. | |
Até a data | datetime |
A data de término da janela de consulta. | |
PropertyName, PropertyValue | string |
Uma ou mais propriedades com suporte. | |
ExtentsToDropQuery | string |
✔️ | Os resultados dessa consulta devem incluir a ExtentId coluna, que contém as IDs de extensão a serem removidas da tabela de destino. |
ExtentsToMoveQuery | string |
✔️ | Os resultados dessa consulta devem incluir as ExtentId colunas and TableName , que contêm as tabelas de origem e as IDs de extensão a serem movidas para a tabela de destino. |
Propriedades com suporte
Nome da propriedade | Tipo | Obrigatória | Descrição |
---|---|---|---|
setNewIngestionTime |
bool |
Se definido como true , um novo tempo de ingestão é atribuído a todos os registros nas extensões que estão sendo movidas. Isso é útil quando os registros são processados por cargas de trabalho que dependem de cursores de banco de dados, como exibições materializadas e exportação contínua de dados. |
|
extentCreatedOnFrom |
datetime |
✔️ | Aplicar em extensões criadas após este ponto no tempo. |
extentCreatedOnTo |
datetime |
✔️ | Aplicar em extensões criadas antes desse momento. |
Observação
Para obter um melhor desempenho, defina os parâmetros extentCreatedOnFrom e extentCreatedOnTo para o menor intervalo possível.
Devoluções
Quando o comando é executado de forma síncrona, uma tabela com o esquema a seguir é retornada.
Parâmetro de saída | Tipo | Descrição |
---|---|---|
OriginalExtentId | string |
Um identificador exclusivo (GUID) para a extensão original na tabela de origem que foi movida para a tabela de destino ou a extensão na tabela de destino que foi descartada. |
ResultExtentId | string |
Um identificador exclusivo (GUID) para a extensão de resultado movida da tabela de origem para a tabela de destino. Vazio, se a extensão foi descartada da tabela de destino. Em caso de falha: "Falha". |
Detalhes | string |
Inclui os detalhes da falha se a operação falhar. |
Quando o comando é executado de forma assíncrona, uma ID de operação (GUID) é retornada. Monitore o status da operação com o comando .show operations e recupere os resultados de uma execução bem-sucedida com o comando .show operation details .
Observação
O comando falhará se as extensões retornadas pela consulta ExtentsToDropQuery não existirem na tabela de destino. Isso pode acontecer se as extensões foram mescladas antes da execução do comando substituir. Para garantir que o comando falhe em extensões ausentes, verifique se a consulta retorna os ExtentIds esperados. O primeiro exemplo falhará se a extensão a ser descartada não existir na tabela MyOtherTable. O segundo exemplo, no entanto, será bem-sucedido mesmo que a extensão a ser descartada não exista, já que a consulta a ser descartada não retornou nenhuma ID de extensão.
Exemplos
Mover todas as extensões em um intervalo de tempo de criação especificado de duas tabelas
Mova todas as extensões de duas tabelas específicas (MyTable1
, MyTable2
) em um intervalo de tempo de criação especificado para a tabela MyOtherTable
e solte todas as extensões marcadas com MyOtherTable
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
}
Saída de exemplo
OriginalExtentId | ResultExtentId | Detalhes |
---|---|---|
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 |
Mover todas as extensões em um intervalo de tempo de criação especificado de uma tabela para outra, descartar extensão específica
Mova todas as extensões em um intervalo de tempo de criação especificado de uma tabela específica (MyTable1
) para tabela MyOtherTable
e solte uma extensão específica em MyOtherTable
, por seu 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
}
Implementar uma lógica idempotente
Implemente uma lógica idempotente para que Kusto descarte extensões da tabela t_dest
somente se houver extensões para mover de tabela t_source
para tabela 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
}