3.5 KiB
toc_priority | toc_title |
---|---|
43 | CHECK |
CHECK TABLE Statement
Проверяет таблицу на повреждение данных.
CHECK TABLE [db.]name
Запрос CHECK TABLE
сравнивает текущие размеры файлов (в которых хранятся данные из колонок) с ожидаемыми значениями. Если значения не совпадают, данные в таблице считаются поврежденными. Искажение возможно, например, из-за сбоя при записи данных.
Ответ содержит колонку result
, содержащую одну строку с типом Boolean. Допустимые значения:
- 0 - данные в таблице повреждены;
- 1 - данные не повреждены.
Запрос CHECK TABLE
поддерживает следующие движки таблиц:
При попытке выполнить запрос с таблицами с другими табличными движками, ClickHouse генерирует исключение.
В движках *Log
не предусмотрено автоматическое восстановление данных после сбоя. Используйте запрос CHECK TABLE
, чтобы своевременно выявлять повреждение данных.
Для движков из семейства MergeTree
запрос CHECK TABLE
показывает статус проверки для каждого отдельного куска данных таблицы на локальном сервере.
Что делать, если данные повреждены
В этом случае можно скопировать оставшиеся неповрежденные данные в другую таблицу. Для этого:
- Создайте новую таблицу с такой же структурой, как у поврежденной таблицы. Для этого выполните запрос
CREATE TABLE <new_table_name> AS <damaged_table_name>
. - Установите значение параметра max_threads в 1. Это нужно для того, чтобы выполнить следующий запрос в одном потоке. Установить значение параметра можно через запрос:
SET max_threads = 1
. - Выполните запрос
INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>
. В результате неповрежденные данные будут скопированы в другую таблицу. Обратите внимание, будут скопированы только те данные, которые следуют до поврежденного участка. - Перезапустите
clickhouse-client
, чтобы вернуть предыдущее значение параметраmax_threads
.