> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentación de CHECK TABLE

# Sentencia CHECK TABLE

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.

<Warning>
  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.
</Warning>

<div id="syntax">
  ## Sintaxis
</div>

La sintaxis básica de la consulta es la siguiente:

```sql theme={null}
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](/es/reference/settings/session-settings#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:

* [Log](/es/reference/engines/table-engines/log-family/log)
* [TinyLog](/es/reference/engines/table-engines/log-family/tinylog)
* [StripeLog](/es/reference/engines/table-engines/log-family/stripelog)
* [MergeTree family](/es/reference/engines/table-engines/mergetree-family/mergetree)

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.

<div id="examples">
  ## Ejemplos
</div>

Por defecto, la consulta `CHECK TABLE` muestra el estado general de la comprobación de la tabla:

```sql title="Query" theme={null}
CHECK TABLE test_table;
```

```text title="Response" theme={null}
┌─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`.

```sql title="Query" theme={null}
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─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`.

```sql title="Query" theme={null}
CHECK TABLE t0 PART '201003_7_7_0'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─part_path────┬─is_passed─┬─message─┐
│ 201003_7_7_0 │         1 │         │
└──────────────┴───────────┴─────────┘
```

Tenga en cuenta que cuando la parte no existe, la consulta devuelve un error:

```sql title="Query" theme={null}
CHECK TABLE t0 PART '201003_111_222_0'
```

```text title="Response" theme={null}
DB::Exception: No such data part '201003_111_222_0' to check in table 'default.t0'. (NO_SUCH_DATA_PART)
```

<div id="receiving-a-corrupted-result">
  ### Obtener un resultado 'Corrupted'
</div>

<Warning>
  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.
</Warning>

Elimine el archivo de suma de comprobación existente:

```bash theme={null}
rm /var/lib/clickhouse-server/data/default/t0/201003_3_3_0/checksums.txt
```

```sql title="Query" theme={null}
CHECK TABLE t0 PARTITION ID '201003'
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text title="Response" theme={null}
┌─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`.

```sql theme={null}
CHECK ALL TABLES
FORMAT PrettyCompactMonoBlock
SETTINGS check_query_single_value_result = 0
```

```text theme={null}
┌─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 │         │
└──────────┴──────────┴─────────────┴───────────┴─────────┘
```

<div id="if-the-data-is-corrupted">
  ## Si los datos están corruptos
</div>

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`.
