CHECK TABLE en ClickHouse se utiliza para realizar una comprobación de validación de una tabla específica o de sus particiones. Garantiza la integridad de los datos al verificar las sumas de comprobación y otras estructuras internas de datos.
En particular, compara los tamaños reales de los archivos con los valores esperados almacenados en el servidor. Si los tamaños de los archivos no coinciden con los valores almacenados, significa que los datos están corruptos. Esto puede deberse, por ejemplo, a una caída del sistema durante la ejecución de la consulta.
Sintaxis
table_name: Especifica el nombre de la tabla que desea comprobar.partition_expression: (Opcional) Si desea comprobar una partición concreta de la tabla, puede usar esta expresión para especificarla.part_name: (Opcional) Si desea comprobar una parte concreta de la tabla, puede añadir un literal de cadena para especificar el nombre de la parte.FORMAT format: (Opcional) Permite especificar el formato de salida del resultado.SETTINGS: (Opcional) Permite ajustes adicionales.- (Opcional): check_query_single_value_result: Este ajuste controla si la salida es detallada (
0) o resumida (1). - También se pueden aplicar otros ajustes. Si no necesita un orden determinista en los resultados, puede establecer max_threads en un valor superior a uno para acelerar la consulta.
- (Opcional): check_query_single_value_result: Este ajuste controla si la salida es detallada (
check_query_single_value_result.
En el caso de check_query_single_value_result = 1, solo se devuelve la columna result con una única fila. El valor de esta fila es 1 si la comprobación de integridad se supera y 0 si los datos están corruptos.
Con check_query_single_value_result = 0, la consulta devuelve las siguientes columnas:
part_path: Indica la ruta a la parte de datos o el nombre del archivo.is_passed: Devuelve 1 si la comprobación de esta parte se completa correctamente; en caso contrario, 0.message: Cualquier mensaje adicional relacionado con la comprobación, como errores o mensajes de éxito.
CHECK TABLE admite los siguientes motores de tabla:
Ejecutarla sobre tablas con otros motores de tabla provoca una excepción NOT_IMPLEMENTED.
Los motores de la familia *Log no proporcionan recuperación automática de datos en caso de fallo. Use la consulta CHECK TABLE para detectar la pérdida de datos a tiempo.
Ejemplos
CHECK TABLE muestra el estado general de la comprobación de la tabla:
Query
Response
check_query_single_value_result.
Además, para comprobar una partición concreta de la tabla, puede usar la palabra clave PARTITION.
Query
Response
PART.
Query
Response
Query
Response
Obtener un resultado ‘Corrupted’
Query
Response
(Replicated)MergeTree existentes de una sola vez mediante la consulta CHECK ALL TABLES.
Si los datos están corruptos
- Cree una tabla nueva con la misma estructura que la tabla dañada. Para ello, ejecute la consulta
CREATE TABLE <new_table_name> AS <damaged_table_name>. - Establezca el valor de
max_threadsen 1 para procesar la siguiente consulta en un solo hilo. Para ello, ejecute la consultaSET max_threads = 1. - Ejecute la consulta
INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>. Esta operación copia los datos no corruptos de la tabla dañada a otra tabla. Solo se copiarán los datos anteriores a la parte corrupta. - Reinicie
clickhouse-clientpara restablecer el valor demax_threads.