- DETACH PARTITION|PART — Move uma partição ou parte para o diretório
detachede deixa de reconhecê-la. - DROP PARTITION|PART — Exclui uma partição ou parte.
- DROP DETACHED PARTITION|PART - Exclui uma parte ou todas as partes de uma partição em
detached. - FORGET PARTITION — Exclui os metadados de uma partição do ZooKeeper se ela estiver vazia.
- ATTACH PARTITION|PART — Adiciona à tabela uma partição ou parte do diretório
detached. - ATTACH PARTITION FROM — Copia a partição de dados de uma tabela para outra e a adiciona.
- REPLACE PARTITION — Copia a partição de dados de uma tabela para outra e a substitui.
- MOVE PARTITION TO TABLE — Move a partição de dados de uma tabela para outra.
- CLEAR COLUMN IN PARTITION — Redefine o valor de uma coluna especificada em uma partição.
- CLEAR INDEX IN PARTITION — Redefine o índice secundário especificado em uma partição.
- FREEZE PARTITION — Cria um backup de uma partição.
- UNFREEZE PARTITION — Remove um backup de uma partição.
- FETCH PARTITION|PART — Baixa uma parte ou partição de outro servidor.
- MOVE PARTITION|PART — Move a partição/parte de dados para outro disco ou volume.
- UPDATE IN PARTITION — Atualiza os dados dentro da partição com base em uma condição.
- DELETE IN PARTITION — Exclui os dados dentro da partição com base em uma condição.
- REWRITE PARTS — Reescreve completamente as partes da tabela (ou de uma partição específica).
DETACH PARTITION|PART
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:
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
DROP DETACHED PARTITION|PART
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
ATTACH PARTITION|PART
detached. É possível adicionar dados de uma partição inteira ou de uma parte individual. Exemplos:
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
table1 para table2.
Observe que:
- Os dados não serão excluídos nem de
table1nem detable2. table1pode ser uma tabela temporária.
- 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_manipulationestiver 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
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. table1pode ser uma tabela temporária.
- 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_manipulationestiver 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
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_manipulationestiver 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
DEFAULT tiver sido definida ao criar a tabela, esta consulta define o valor da coluna para o valor padrão especificado.
Exemplo:
FREEZE PARTITION
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.
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 NAMEfor 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./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:
- Crie a tabela, se ela ainda não existir. Para ver a consulta, use o arquivo .sql (substitua
ATTACHnele porCREATE). - Copie os dados do diretório
data/database/table/dentro do backup para o diretório/var/lib/clickhouse/data/database/table/detached/. - Execute consultas
ALTER TABLE t ATTACH PARTITIONpara adicionar os dados à tabela.
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
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
CLEAR COLUMN, mas reinicializa um índice em vez dos dados de uma coluna.
FETCH PARTITION|PART
- Baixa a partição|parte do shard especificado. Em ‘path-in-zookeeper’, você deve especificar o caminho para o shard no ZooKeeper.
- Em seguida, a consulta coloca os dados baixados no diretório
detachedda tabelatable_name. Use a consulta ATTACH PARTITION|PART para adicionar os dados à tabela.
- FETCH PARTITION
- FETCH PART
- A consulta
ALTER ... FETCH PARTITION|PARTnão é replicada. Ela coloca a parte ou partição no diretóriodetachedapenas 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óriodetachede, às demais, a partir das réplicas vizinhas.
ALTER TABLE, ela não altera a estrutura da tabela nem modifica imediatamente os dados disponíveis na tabela.
MOVE PARTITION|PART
MergeTree. Consulte Uso de vários dispositivos de bloco para armazenamento de dados.
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 MOVEconcorrente ou como resultado da mesclagem de dados em segundo plano. O usuário não deve executar nenhuma ação adicional nesse caso.
UPDATE IN PARTITION
Exemplo
Veja também
DELETE IN PARTITION
Exemplo
REWRITE PARTS
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
ALTER ... PARTITION de diferentes maneiras:
- Como um valor da coluna
partitionda tabelasystem.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
nameda tabela system.detached_parts. Por exemplo,ALTER TABLE visits ATTACH PART '201901_1_1_0'.
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.