CHECK TABLE dans ClickHouse sert à effectuer une vérification sur une table donnée ou sur ses partitions. Elle garantit l’intégrité des données en vérifiant les sommes de contrôle et d’autres structures de données internes.
Elle compare notamment les tailles réelles des fichiers aux valeurs attendues stockées sur le serveur. Si les tailles des fichiers ne correspondent pas aux valeurs stockées, cela signifie que les données sont corrompues. Cela peut être causé, par exemple, par un plantage du système pendant l’exécution de la requête.
Syntaxe
table_name: Spécifie le nom de la table que vous souhaitez vérifier.partition_expression: (Facultatif) Si vous souhaitez vérifier une partition spécifique de la table, vous pouvez utiliser cette expression pour la spécifier.part_name: (Facultatif) Si vous souhaitez vérifier une partie spécifique de la table, vous pouvez ajouter un littéral de chaîne pour spécifier le nom de la partie.FORMAT format: (Facultatif) Permet de spécifier le format de sortie du résultat.SETTINGS: (Facultatif) Permet d’ajouter des paramètres supplémentaires.- (Facultatif) : check_query_single_value_result : Ce paramètre détermine si la sortie est détaillée (
0) ou résumée (1). - D’autres paramètres peuvent également être appliqués. Si vous n’avez pas besoin d’un ordre déterministe pour les résultats, vous pouvez définir max_threads sur une valeur supérieure à un afin d’accélérer la requête.
- (Facultatif) : check_query_single_value_result : Ce paramètre détermine si la sortie est détaillée (
check_query_single_value_result.
Lorsque check_query_single_value_result = 1, seule la colonne result, avec une seule ligne, est renvoyée. La valeur de cette ligne est 1 si la vérification d’intégrité réussit, et 0 si les données sont corrompues.
Avec check_query_single_value_result = 0, la requête renvoie les colonnes suivantes :
part_path: Indique le chemin vers la partie de données ou le nom du fichier.is_passed: Renvoie 1 si la vérification de cette partie réussit, 0 sinon.message: Tout message supplémentaire lié à la vérification, comme des erreurs ou des messages de réussite.
CHECK TABLE prend en charge les moteurs de table suivants :
Son exécution sur des tables utilisant d’autres moteurs de table provoque une exception NOT_IMPLEMENTED.
Les moteurs de la famille *Log n’assurent pas de récupération automatique des données en cas de défaillance. Utilisez la requête CHECK TABLE pour détecter rapidement toute perte de données.
Exemples
CHECK TABLE affiche l’état général de la vérification de la table :
Query
Response
check_query_single_value_result.
De plus, pour vérifier une partition précise de la table, vous pouvez utiliser le mot-clé PARTITION.
Query
Response
PART.
Query
Response
Query
Response
Obtenir un résultat « Corrompu »
Query
Response
CHECK TABLE pour la partition concernée, et le statut restera signalé comme ‘is_passed = 1’.
Vous pouvez vérifier en une seule fois toutes les tables (Replicated)MergeTree existantes à l’aide de la requête CHECK ALL TABLES.
Si les données sont corrompues
- Créez une nouvelle table avec la même structure que la table endommagée. Pour ce faire, exécutez la query
CREATE TABLE <new_table_name> AS <damaged_table_name>. - Définissez
max_threadssur 1 afin d’exécuter la requête suivante dans un seul thread. Pour ce faire, exécutez la querySET max_threads = 1. - Exécutez la query
INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>. Cette requête copie les données non corrompues de la table endommagée vers une autre table. Seules les données situées avant la partie corrompue seront copiées. - Redémarrez
clickhouse-clientpour réinitialiser la valeur demax_threads.