OPTIMIZE TABLE ... FINAL (consulte esta documentação), pois esse caso de uso se destina à administração, não às operações diárias.
OPTIMIZE não pode corrigir o erro Too many parts.OPTIMIZE é compatível com a família MergeTree (incluindo visões materializadas) e com os motores Buffer. Outros motores de tabela não são compatíveis.
Quando OPTIMIZE é usado com a família ReplicatedMergeTree de motores de tabela, o ClickHouse cria uma tarefa de mesclagem e aguarda sua execução em todas as réplicas (se a configuração alter_sync estiver definida como 2) ou na réplica atual (se a configuração alter_sync estiver definida como 1).
- Se
OPTIMIZEnão executar uma mesclagem por qualquer motivo, o cliente não será notificado. Para ativar notificações, use a configuração optimize_throw_if_noop. - Se você especificar uma
PARTITION, apenas a partição especificada será otimizada. Como definir a expressão de partição. - Se você especificar
FINALouFORCE, a otimização será executada mesmo quando todos os dados já estiverem em uma única parte. Você pode controlar esse comportamento com optimize_skip_merged_partitions. Além disso, a mesclagem é forçada mesmo se houver mesclagens simultâneas em execução. - Se você especificar
DEDUPLICATE, linhas completamente idênticas (a menos que a cláusula BY seja especificada) serão desduplicadas (todas as colunas são comparadas); isso só faz sentido para o motor MergeTree.
OPTIMIZE por meio da configuração replication_wait_for_inactive_replica_timeout.
Se
alter_sync estiver definido como 2 e algumas réplicas permanecerem inativas por mais tempo do que o especificado pela configuração replication_wait_for_inactive_replica_timeout, então será gerada uma exceção UNFINISHED.DRY RUN
DRY RUN simula uma mesclagem das partes especificadas sem efetivar o resultado. A parte mesclada é gravada em um local temporário, validada e depois descartada. As partes originais e os dados da tabela permanecem inalterados.
Isso é útil para:
- Testar a correção da mesclagem entre versões do ClickHouse.
- Reproduzir de forma determinística bugs relacionados à mesclagem.
- Fazer benchmarking do desempenho da mesclagem.
DRY RUN tem suporte apenas para tabelas da família MergeTree. A palavra-chave PARTS, com uma lista de nomes de partes, é obrigatória. Todas as partes especificadas devem existir, estar ativas e pertencer à mesma partição.
DRY RUN é incompatível com FINAL e PARTITION. Pode ser combinado com DEDUPLICATE (com especificação opcional de colunas) e CLEANUP (para tabelas ReplacingMergeTree).
Sintaxe
CHECK TABLE. Esse comportamento é controlado pela configuração optimize_dry_run_check_part (habilitada por padrão). Desabilitá-la faz com que a validação seja ignorada, o que pode ser útil para benchmarking da própria mesclagem.
Exemplo
expressão BY
*, COLUMNS ou EXCEPT. A lista de colunas escrita explicitamente ou expandida implicitamente deve incluir todas as colunas especificadas na expressão de ordenação das linhas (tanto a chave primária quanto a chave de ordenação) e na expressão de particionamento (chave de particionamento).
Observe que
* se comporta exatamente como em SELECT: colunas MATERIALIZED e ALIAS não são consideradas na expansão.Além disso, é um erro especificar uma lista vazia de colunas, escrever uma expressão que resulte em uma lista vazia de colunas ou fazer a desduplicação por uma coluna ALIAS.Query
Query
Query
Response
DEDUPLICATE
Query
Query
Response
DEDUPLICATE BY *
ALIAS nem MATERIALIZED. Considerando a tabela acima, essas colunas são primary_key, secondary_key, value e partition_key:
Query
Query
Response
DEDUPLICATE BY * EXCEPT
ALIAS nem MATERIALIZED, excluindo explicitamente value: as colunas primary_key, secondary_key e partition_key.
Query
Query
Response
DEDUPLICATE BY <list of columns>
primary_key, secondary_key e partition_key:
Query
Query
Response
DEDUPLICATE BY COLUMNS(<regex>)
primary_key, secondary_key e partition_key:
Query
Query
Response