Saltar al contenido principal
La consulta 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.
La consulta CHECK TABLE puede leer todos los datos de la tabla y ocupar algunos recursos, por lo que puede ser intensiva en el uso de recursos. Considere el posible impacto en el rendimiento y en el uso de recursos antes de ejecutar esta consulta. Esta consulta no mejorará el rendimiento del sistema y no debe ejecutarla si no está seguro de lo que está haciendo.

Sintaxis

La sintaxis básica de la consulta es la siguiente:
CHECK TABLE table_name [PARTITION partition_expression | PART part_name] [FORMAT format] [SETTINGS check_query_single_value_result = (0|1) [, other_settings]]
  • 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.
La respuesta de la consulta depende del valor del ajuste 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.
La consulta 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

Por defecto, la consulta CHECK TABLE muestra el estado general de la comprobación de la tabla:
Query
CHECK TABLE test_table;
Response
┌─result─┐
│      1 │
└────────┘
Si desea ver el estado de la comprobación de cada parte de datos por separado, puede usar la configuración check_query_single_value_result. Además, para comprobar una partición concreta de la tabla, puede usar la palabra clave PARTITION.
Query
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
Response
┌─part_path────┬─is_passed─┬─message─┐
│ 201003_7_7_0 │         1 │         │
│ 201003_3_3_0 │         1 │         │
└──────────────┴───────────┴─────────┘
Del mismo modo, puede comprobar una parte específica de la tabla con la palabra clave PART.
Query
CHECK TABLE t0 PART '201003_7_7_0'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
Response
┌─part_path────┬─is_passed─┬─message─┐
│ 201003_7_7_0 │         1 │         │
└──────────────┴───────────┴─────────┘
Tenga en cuenta que cuando la parte no existe, la consulta devuelve un error:
Query
CHECK TABLE t0 PART '201003_111_222_0'
Response
DB::Exception: No such data part '201003_111_222_0' to check in table 'default.t0'. (NO_SUCH_DATA_PART)

Obtener un resultado ‘Corrupted’

Descargo de responsabilidad: El procedimiento que se describe aquí, incluida la manipulación manual de archivos o su eliminación directamente en el directorio de datos, es solo para entornos experimentales o de desarrollo. No intente hacer esto en un servidor de producción, ya que puede provocar la pérdida de datos u otras consecuencias no deseadas.
Elimine el archivo de suma de comprobación existente:
rm /var/lib/clickhouse-server/data/default/t0/201003_3_3_0/checksums.txt
Query
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
Response
┌─part_path────┬─is_passed─┬─message──────────────────────────────────┐
│ 201003_7_7_0 │         1 │                                          │
│ 201003_3_3_0 │         1 │ Checksums recounted and written to disk. │
└──────────────┴───────────┴──────────────────────────────────────────┘
Si falta el archivo checksums.txt, se puede restaurar. Se recalculará y se reescribirá durante la ejecución del comando CHECK TABLE para la partición específica, y el estado seguirá mostrándose como ‘is_passed = 1’. Puede comprobar todas las tablas (Replicated)MergeTree existentes de una sola vez mediante la consulta CHECK ALL TABLES.
CHECK ALL TABLES
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
┌─database─┬─table────┬─part_path───┬─is_passed─┬─message─┐
│ default  │ t2       │ all_1_95_3  │         1 │         │
│ db1      │ table_01 │ all_39_39_0 │         1 │         │
│ default  │ t1       │ all_39_39_0 │         1 │         │
│ db1      │ t1       │ all_39_39_0 │         1 │         │
│ db1      │ table_01 │ all_1_6_1   │         1 │         │
│ default  │ t1       │ all_1_6_1   │         1 │         │
│ db1      │ t1       │ all_1_6_1   │         1 │         │
│ db1      │ table_01 │ all_7_38_2  │         1 │         │
│ db1      │ t1       │ all_7_38_2  │         1 │         │
│ default  │ t1       │ all_7_38_2  │         1 │         │
└──────────┴──────────┴─────────────┴───────────┴─────────┘

Si los datos están corruptos

Si la tabla está corrupta, puede copiar los datos no corruptos a otra tabla. Para ello:
  1. 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>.
  2. Establezca el valor de max_threads en 1 para procesar la siguiente consulta en un solo hilo. Para ello, ejecute la consulta SET max_threads = 1.
  3. 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.
  4. Reinicie clickhouse-client para restablecer el valor de max_threads.
Última modificación el 10 de junio de 2026