Pular para o conteúdo principal
As seguintes operações com partições estão disponíveis:

DETACH PARTITION|PART

Move todos os dados da partição especificada para o diretório detached. O servidor deixa de considerar a partição de dados movida para detached, como se ela não existisse. O servidor não reconhecerá esses dados até que você execute a consulta ATTACH. Exemplo:
Leia sobre como definir a expressão de partição na seção Como definir a expressão de partição. Depois que a consulta for executada, você poderá fazer o que quiser com os dados no diretório detached — excluí-los do sistema de arquivos ou simplesmente deixá-los lá. Esta consulta é replicada — ela move os dados para o diretório detached em todas as réplicas. Observe que essa consulta só pode ser executada em uma réplica líder. Para verificar se uma réplica é líder, execute a consulta SELECT na tabela system.replicas. Como alternativa, é mais fácil executar uma consulta DETACH em todas as réplicas — todas elas lançam uma exceção, exceto as réplicas líderes (já que vários líderes são permitidos).

DROP PARTITION|PART

Exclui a partição especificada da tabela. Esta consulta marca a partição como inativa e exclui completamente os dados em aproximadamente 10 minutos. Leia sobre como definir a expressão de partição na seção Como definir a expressão de partição. A consulta é replicada — ela exclui os dados em todas as réplicas. Exemplo:

DROP DETACHED PARTITION|PART

Remove a parte especificada ou todas as partes da partição especificada de detached. Leia mais sobre como definir a expressão de partição na seção Como definir a expressão de partição.

FORGET PARTITION

Remove todos os metadados de uma partição vazia do ZooKeeper. A consulta falha se a partição não estiver vazia ou não for reconhecida. Certifique-se de executar isso apenas para partições que nunca mais serão usadas. Leia sobre como definir a expressão de partição na seção Como definir a expressão de partição. Exemplo:

ATTACH PARTITION|PART

Adiciona dados à tabela a partir do diretório detached. É possível adicionar dados de uma partição inteira ou de uma parte individual. Exemplos:
Leia mais sobre como definir a expressão de partição na seção Como definir a expressão de partição. Esta consulta é replicada. A réplica iniciadora verifica se há dados no diretório detached. Se houver dados, a consulta verifica a integridade deles. Se tudo estiver correto, a consulta adiciona os dados à tabela. Se a réplica não iniciadora, ao receber o comando ATTACH, encontrar a parte com as somas de verificação corretas em seu próprio diretório detached, ela anexa os dados sem precisar buscá-los em outras réplicas. Se não houver uma parte com as somas de verificação corretas, os dados serão baixados de qualquer réplica que tenha essa parte. Você pode colocar dados no diretório detached em uma réplica e usar a consulta ALTER ... ATTACH para adicioná-los à tabela em todas as réplicas.

ATTACH PARTITION FROM

Esta consulta copia a partição de dados de table1 para table2. Observe que:
  • Os dados não serão excluídos nem de table1 nem de table2.
  • table1 pode ser uma tabela temporária.
Para que a consulta seja executada com sucesso, as seguintes condições devem ser atendidas:
  • Ambas as tabelas devem ter a mesma estrutura.
  • Ambas as tabelas devem ter a mesma chave de partição, a mesma chave ORDER BY e a mesma chave primária.
  • Ambas as tabelas devem ter a mesma política de armazenamento.
  • A tabela de destino deve incluir todos os índices e projeções da tabela de origem. Se a configuração enforce_index_structure_match_on_partition_manipulation estiver habilitada na tabela de destino, os índices e as projeções deverão ser idênticos. Caso contrário, a tabela de destino pode ter um conjunto que inclua todos os índices e projeções da tabela de origem, além de outros.

REPLACE PARTITION

Esta consulta copia a partição de dados de table1 para table2 e substitui a partição existente em table2. A operação é atômica. Observe que:
  • Os dados não serão excluídos de table1.
  • table1 pode ser uma tabela temporária.
Para que a consulta seja executada com sucesso, as seguintes condições devem ser atendidas:
  • Ambas as tabelas devem ter a mesma estrutura.
  • Ambas as tabelas devem ter a mesma chave de partição, a mesma chave ORDER BY e a mesma chave primária.
  • Ambas as tabelas devem ter a mesma política de armazenamento.
  • A tabela de destino deve incluir todos os índices e projeções da tabela de origem. Se a configuração enforce_index_structure_match_on_partition_manipulation estiver habilitada na tabela de destino, os índices e as projeções deverão ser idênticos. Caso contrário, a tabela de destino pode conter um superconjunto dos índices e das projeções da tabela de origem.

MOVE PARTITION TO TABLE

Esta consulta move a partição de dados de table_source para table_dest, excluindo os dados de table_source. Para que a consulta seja executada com sucesso, as seguintes condições devem ser atendidas:
  • Ambas as tabelas devem ter a mesma estrutura.
  • Ambas as tabelas devem ter a mesma chave de partição, a mesma chave ORDER BY e a mesma chave primária.
  • Ambas as tabelas devem ter a mesma política de armazenamento.
  • Ambas as tabelas devem pertencer à mesma família de engines (replicada ou não replicada).
  • A tabela de destino deve incluir todos os índices e projeções da tabela de origem. Se a configuração enforce_index_structure_match_on_partition_manipulation estiver habilitada na tabela de destino, os índices e as projeções deverão ser idênticos. Caso contrário, a tabela de destino poderá ter um superconjunto dos índices e das projeções da tabela de origem.

CLEAR COLUMN IN PARTITION

Redefine todos os valores da coluna especificada em uma partição. Se a cláusula DEFAULT tiver sido definida ao criar a tabela, esta consulta define o valor da coluna para o valor padrão especificado. Exemplo:

FREEZE PARTITION

Esta consulta cria um backup local de uma partição especificada. Se a cláusula PARTITION for omitida, a consulta criará o backup de todas as partições de uma só vez.
Todo o processo de backup é realizado sem interromper o servidor.
Observe que, em tabelas no formato antigo, você pode especificar o prefixo do nome da partição (por exemplo, 2019) — nesse caso, a consulta cria o backup de todas as partições correspondentes. Leia sobre como definir a expressão de partição na seção Como definir a expressão de partição. No momento da execução, para criar um snapshot dos dados, a consulta cria hardlinks para os dados da tabela. Os hardlinks são colocados no diretório /var/lib/clickhouse/shadow/N/..., onde:
  • /var/lib/clickhouse/ é o diretório de trabalho do ClickHouse especificado na configuração.
  • N é o número incremental do backup.
  • se o parâmetro WITH NAME for especificado, então o valor do parâmetro 'backup_name' será usado em vez do número incremental.
Se você usar um conjunto de discos para armazenamento de dados em uma tabela, o diretório shadow/N aparecerá em cada disco, armazenando as partes de dados correspondentes à expressão PARTITION.
A mesma estrutura de diretórios existente em /var/lib/clickhouse/ é criada dentro do backup. A consulta executa chmod em todos os arquivos, impedindo a gravação neles. Depois de criar o backup, você pode copiar os dados de /var/lib/clickhouse/shadow/ para o servidor remoto e, em seguida, excluí-los do servidor local. Observe que a consulta ALTER t FREEZE PARTITION não é replicada. Ela cria um backup local apenas no servidor local. A consulta cria o backup quase instantaneamente (mas primeiro aguarda a conclusão das consultas em andamento na tabela correspondente). ALTER TABLE t FREEZE PARTITION copia apenas os dados, não os metadados da tabela. Para fazer um backup dos metadados da tabela, copie o arquivo /var/lib/clickhouse/metadata/database/table.sql Para restaurar dados de um backup, faça o seguinte:
  1. Crie a tabela, se ela ainda não existir. Para ver a consulta, use o arquivo .sql (substitua ATTACH nele por CREATE).
  2. Copie os dados do diretório data/database/table/ dentro do backup para o diretório /var/lib/clickhouse/data/database/table/detached/.
  3. Execute consultas ALTER TABLE t ATTACH PARTITION para adicionar os dados à tabela.
A restauração a partir de um backup não exige interromper o servidor. A consulta processa partes em paralelo, e o número de threads é controlado pela configuração max_threads. Para mais informações sobre backups e restauração de dados, consulte a seção “Backup e restauração no ClickHouse”.

UNFREEZE PARTITION

Remove do disco as partições frozen com o nome especificado. Se a cláusula PARTITION for omitida, a consulta remove o backup de todas as partições de uma só vez.

CLEAR INDEX IN PARTITION

A consulta funciona de forma semelhante a CLEAR COLUMN, mas reinicializa um índice em vez dos dados de uma coluna.

FETCH PARTITION|PART

Baixa uma partição de outro servidor. Esta consulta só funciona com tabelas replicadas. A consulta faz o seguinte:
  1. Baixa a partição|parte do shard especificado. Em ‘path-in-zookeeper’, você deve especificar o caminho para o shard no ZooKeeper.
  2. Em seguida, a consulta coloca os dados baixados no diretório detached da tabela table_name. Use a consulta ATTACH PARTITION|PART para adicionar os dados à tabela.
Por exemplo:
  1. FETCH PARTITION
  1. FETCH PART
Observe que:
  • A consulta ALTER ... FETCH PARTITION|PART não é replicada. Ela coloca a parte ou partição no diretório detached apenas no servidor local.
  • A consulta ALTER TABLE ... ATTACH é replicada. Ela adiciona os dados a todas as réplicas. Os dados são adicionados a uma das réplicas a partir do diretório detached e, às demais, a partir das réplicas vizinhas.
Antes do download, o sistema verifica se a partição existe e se a estrutura da tabela é compatível. A réplica mais adequada é selecionada automaticamente entre as réplicas saudáveis. Embora a consulta se chame ALTER TABLE, ela não altera a estrutura da tabela nem modifica imediatamente os dados disponíveis na tabela.

MOVE PARTITION|PART

Move partições ou partes de dados para outro volume ou disco em tabelas com motor MergeTree. Consulte Uso de vários dispositivos de bloco para armazenamento de dados.
A consulta ALTER TABLE t MOVE:
  • Não é replicada, porque diferentes réplicas podem ter políticas de armazenamento diferentes.
  • Retorna um erro se o disco ou volume especificado não estiver configurado. A consulta também retorna um erro se não for possível aplicar as condições de movimentação de dados especificadas na política de armazenamento.
  • Pode retornar um erro caso os dados a serem movidos já tenham sido movidos por um processo em segundo plano, por uma consulta ALTER TABLE t MOVE concorrente ou como resultado da mesclagem de dados em segundo plano. O usuário não deve executar nenhuma ação adicional nesse caso.
Exemplo:

UPDATE IN PARTITION

Manipula os dados da partição especificada que correspondem à expressão de filtro informada. É implementado como uma mutação. Sintaxe:

Exemplo

Veja também

DELETE IN PARTITION

Exclui dados na partição especificada que correspondem à expressão de filtro especificada. Implementado como uma mutação. Sintaxe:

Exemplo

REWRITE PARTS

Isso reescreverá as partes do zero, usando todas as novas configurações. Isso faz sentido porque configurações no nível da tabela, como use_const_adaptive_granularity, por padrão só são aplicadas a partes recém-escritas.

Exemplo

Veja também

Como definir a expressão de partição

Você pode especificar a expressão de partição em consultas ALTER ... PARTITION de diferentes maneiras:
  • Como um valor da coluna partition da tabela system.parts. Por exemplo, ALTER TABLE visits DETACH PARTITION 201901.
  • Usando a palavra-chave ALL. Ela só pode ser usada com DROP/DETACH/ATTACH/ATTACH FROM. Por exemplo, ALTER TABLE visits ATTACH PARTITION ALL.
  • Como uma tupla de expressões ou constantes que corresponda (em tipos) à tupla da chave de particionamento da tabela. No caso de uma chave de particionamento com um único elemento, a expressão deve ser envolvida na função tuple (...). Por exemplo, ALTER TABLE visits DETACH PARTITION tuple(toYYYYMM(toDate('2019-01-25'))).
  • Usando o ID da partição. O ID da partição é um identificador de string da partição (legível para humanos, quando possível) usado como nome das partições no sistema de arquivos e no ZooKeeper. O ID da partição deve ser especificado na cláusula PARTITION ID, entre aspas simples. Por exemplo, ALTER TABLE visits DETACH PARTITION ID '201901'.
  • Na consulta ALTER ATTACH PART e DROP DETACHED PART, para especificar o nome de uma parte, use um literal de string com um valor da coluna name da tabela system.detached_parts. Por exemplo, ALTER TABLE visits ATTACH PART '201901_1_1_0'.
O uso de aspas ao especificar a partição depende do tipo da expressão de partição. Por exemplo, para o tipo String, você precisa especificar o nome entre aspas ('). Para os tipos Date e Int*, não é necessário usar aspas. Todas as regras acima também valem para a consulta OPTIMIZE. Se você precisar especificar a única partição ao otimizar uma tabela sem particionamento, defina a expressão PARTITION tuple(). Por exemplo:
IN PARTITION especifica a partição à qual as expressões UPDATE ou DELETE são aplicadas como resultado da consulta ALTER TABLE. Novas partes são criadas apenas a partir da partição especificada. Dessa forma, IN PARTITION ajuda a reduzir a carga quando a tabela é dividida em muitas partições e você só precisa atualizar os dados de forma pontual. Exemplos de consultas ALTER ... PARTITION são mostrados nos testes 00502_custom_partitioning_local e 00502_custom_partitioning_replicated_zookeeper.
Última modificação em 2 de julho de 2026