CHECK TABLE в ClickHouse используется для проверки указанной таблицы или её партиций. Он обеспечивает целостность данных, проверяя контрольные суммы и другие внутренние структуры данных.
В частности, он сравнивает фактические размеры файлов с ожидаемыми значениями, которые хранятся на сервере. Если размеры файлов не совпадают с сохранёнными значениями, это означает, что данные повреждены. Это может быть вызвано, например, сбоем системы во время выполнения запроса.
Синтаксис
table_name: Указывает имя таблицы, которую нужно проверить.partition_expression: (Необязательно) Если нужно проверить конкретную партицию таблицы, это выражение можно использовать для указания партиции.part_name: (Необязательно) Если нужно проверить конкретную часть таблицы, можно добавить строковый литерал с именем части.FORMAT format: (Необязательно) Позволяет указать формат вывода результата.SETTINGS: (Необязательно) Позволяет задать дополнительные настройки.- (Необязательно): check_query_single_value_result: Эта настройка определяет, будет ли вывод подробным (
0) или сводным (1). - Можно также применять и другие настройки. Если детерминированный порядок результатов не требуется, для ускорения запроса можно установить max_threads в значение больше единицы.
- (Необязательно): check_query_single_value_result: Эта настройка определяет, будет ли вывод подробным (
check_query_single_value_result.
Если check_query_single_value_result = 1, возвращается только столбец result с одной строкой. Значение в этой строке — 1, если проверка целостности пройдена, и 0, если данные повреждены.
Если check_query_single_value_result = 0, запрос возвращает следующие столбцы:
part_path: Указывает путь к части данных или имя файла.is_passed: Возвращает 1, если проверка этой части прошла успешно, иначе 0.message: Любые дополнительные сообщения, связанные с проверкой, например сообщения об ошибках или об успешной проверке.
CHECK TABLE поддерживает следующие движки таблиц:
Выполнение для таблиц с другими движками таблиц приводит к исключению NOT_IMPLEMENTED.
Движки из семейства *Log не обеспечивают автоматическое восстановление данных при сбое. Используйте запрос CHECK TABLE, чтобы своевременно отслеживать потерю данных.
Примеры
CHECK TABLE показывает общий статус проверки таблицы:
Query
Response
check_query_single_value_result.
Кроме того, чтобы проверить конкретную партицию таблицы, можно использовать ключевое слово PARTITION.
Query
Response
PART.
Query
Response
Query
Response
Получение результата «Corrupted»
Query
Response
(Replicated)MergeTree сразу с помощью запроса CHECK ALL TABLES.
Если данные повреждены
- Создайте новую таблицу с той же структурой, что и поврежденная. Для этого выполните запрос
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.