CHECK TABLE 쿼리는 특정 테이블 또는 해당 파티션에 대한 유효성 검사를 수행하는 데 사용됩니다. 이 쿼리는 체크섬과 기타 내부 데이터 구조를 검증하여 데이터 무결성을 확인합니다.
특히 실제 파일 크기를 서버에 저장된 예상 값과 비교합니다. 파일 크기가 저장된 값과 일치하지 않으면 데이터가 손상된 것을 의미합니다. 예를 들어 쿼리 실행 중 시스템 충돌이 발생하면 이런 문제가 생길 수 있습니다.
구문
table_name: 확인할 테이블 이름을 지정합니다.partition_expression: (선택 사항) 테이블의 특정 파티션을 확인하려는 경우 이 표현식으로 해당 파티션을 지정할 수 있습니다.part_name: (선택 사항) 테이블의 특정 파트를 확인하려는 경우 문자열 리터럴을 추가해 파트 이름을 지정할 수 있습니다.FORMAT format: (선택 사항) 결과의 출력 형식을 지정할 수 있습니다.SETTINGS: (선택 사항) 추가 설정을 지정할 수 있습니다.- (선택 사항): check_query_single_value_result: 이 설정은 출력이 상세 형태(
0)인지 요약 형태(1)인지를 제어합니다. - 다른 설정도 함께 적용할 수 있습니다. 결과의 순서가 결정적일 필요가 없다면 쿼리 속도를 높이기 위해 max_threads를 1보다 큰 값으로 설정할 수 있습니다.
- (선택 사항): 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 쿼리는 테이블(table)의 전체 검사 상태를 표시합니다:
Query
Response
check_query_single_value_result 설정을 사용할 수 있습니다.
또한 테이블의 특정 파티션을 검사하려면 PARTITION 키워드를 사용할 수 있습니다.
Query
Response
PART 키워드를 사용하면 테이블의 특정 파트를 확인할 수 있습니다.
Query
Response
Query
Response
‘Corrupted’ 결과가 반환되는 경우
Query
Response
checksums.txt 파일이 없더라도 복원할 수 있습니다. 특정 파티션에 대해 CHECK TABLE 명령을 실행하는 동안 이 파일이 다시 계산되어 재작성되며, 상태는 계속 ‘is_passed = 1’로 보고됩니다.
CHECK ALL TABLES 쿼리를 사용하면 현재 존재하는 모든 (Replicated)MergeTree 테이블을 한 번에 확인할 수 있습니다.
데이터가 손상된 경우
- 손상된 테이블과 동일한 구조의 새 테이블을 생성합니다. 이를 위해
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>쿼리를 실행하십시오. 이 요청은 손상된 테이블의 손상되지 않은 데이터를 다른 테이블로 복사합니다. 손상된 부분 이전의 데이터만 복사됩니다.max_threads값을 초기화하려면clickhouse-client를 다시 시작하십시오.