CHECK TABLE no ClickHouse é usada para realizar uma verificação em uma tabela específica ou em suas partições. Ela garante a integridade dos dados ao verificar os checksums e outras estruturas internas de dados.
Em particular, ela compara os tamanhos reais dos arquivos com os valores esperados armazenados no servidor. Se os tamanhos dos arquivos não corresponderem aos valores armazenados, isso significa que os dados estão corrompidos. Isso pode ser causado, por exemplo, por uma falha do sistema durante a execução da consulta.
Sintaxe
table_name: Especifica o nome da tabela que você quer verificar.partition_expression: (Opcional) Se você quiser verificar uma partição específica da tabela, pode usar esta expressão para especificá-la.part_name: (Opcional) Se você quiser verificar uma parte específica da tabela, pode adicionar um literal de string para especificar o nome da parte.FORMAT format: (Opcional) Permite especificar o formato de saída do resultado.SETTINGS: (Opcional) Permite definir configurações adicionais.- (Opcional): check_query_single_value_result: Essa configuração controla se a saída será detalhada (
0) ou resumida (1). - Outras configurações também podem ser aplicadas. Se você não precisar de uma ordem determinística para os resultados, pode definir max_threads como um valor maior que um para acelerar a consulta.
- (Opcional): check_query_single_value_result: Essa configuração controla se a saída será detalhada (
check_query_single_value_result.
No caso de check_query_single_value_result = 1, apenas a coluna result, com uma única linha, é retornada. O valor nessa linha é 1 se a verificação de integridade for aprovada e 0 se os dados estiverem corrompidos.
Com check_query_single_value_result = 0, a consulta retorna as seguintes colunas:
part_path: Indica o caminho para a parte de dados ou o nome do arquivo.is_passed: Retorna 1 se a verificação dessa parte for bem-sucedida; caso contrário, retorna 0.message: Quaisquer mensagens adicionais relacionadas à verificação, como erros ou mensagens de sucesso.
CHECK TABLE oferece suporte aos seguintes motores de tabela:
Executá-la em tabelas com outros motores de tabela gera uma exceção NOT_IMPLEMENTED.
Os motores da família *Log não oferecem recuperação automática de dados em caso de falha. Use a consulta CHECK TABLE para detectar perda de dados rapidamente.
Exemplos
CHECK TABLE mostra o status geral da verificação da tabela:
Query
Response
check_query_single_value_result.
Além disso, para verificar uma partição específica da tabela, você pode usar a palavra-chave PARTITION.
Query
Response
PART.
Query
Response
Query
Response
Obtendo um resultado ‘Corrompido’
Query
Response
(Replicated)MergeTree existentes usando a consulta CHECK ALL TABLES.
Se os dados estiverem corrompidos
- Crie uma nova tabela com a mesma estrutura da tabela danificada. Para isso, execute a consulta
CREATE TABLE <new_table_name> AS <damaged_table_name>. - Defina o valor de
max_threadscomo 1 para processar a próxima consulta em uma única thread. Para isso, execute a consultaSET max_threads = 1. - Execute a consulta
INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>. Esse comando copia os dados não corrompidos da tabela danificada para outra tabela. Apenas os dados anteriores à parte corrompida serão copiados. - Reinicie o
clickhouse-clientpara redefinir o valor demax_threads.