Compartilhar via


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 aceitas

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