문제
- 대량 적재(bulk load) 시 단일 테이블 원자성(atomicity): 일반적인 방식은 임시 partial key에 데이터를 삽입한 다음, 레코드를 실제 key로 복사하고 임시 레코드를 삭제하는 것입니다. 이 방식은 성능이 좋지 않으며, 특히 삭제 단계가 전체 작업 시간의 90% 이상을 차지할 수 있습니다.
- 다중 테이블 일관성: 파이프라인이 Table A 적재에는 성공했지만 Table B에서 실패하면, Table A는 이미 커밋되어 롤백할 수 없습니다. 두 테이블에 걸쳐 쿼리하는 분석가는 서로 맞지 않는 데이터를 보게 됩니다.
배경
INSERT가 성공하면 해당 블록의 모든 행이 보이게 되며, 실패하면 어떤 행도 보이지 않습니다. 하지만 여러 번의 삽입이나 여러 테이블에 걸쳐 데이터를 원자적으로 commit하는 기본 제공 메커니즘은 없습니다.
파티션 조작 명령(MOVE PARTITION TO TABLE, REPLACE PARTITION, ATTACH PARTITION FROM)은 소스 테이블과 대상 테이블이 동일한 스토리지 정책을 사용할 때 메타데이터 수준에서 동작합니다.
즉, 데이터 크기와 관계없이 거의 즉시 실행되므로 원자적 스왑 패턴을 구현하는 데 이상적인 구성 요소입니다.
권장 솔루션
단일 테이블 원자성 단계별 안내
삽입이 성공하면 파티션을 프로덕션으로 이동
데이터를 프로덕션으로 이동하고 스테이징 테이블에서 제거하려면MOVE PARTITION을 사용합니다.ATTACH PARTITION을 사용해 데이터를 프로덕션의 기존 파티션에 복사할 수 있습니다.다중 테이블 일관성
요구 사항 및 제약 조건
MOVE PARTITION TO TABLE, REPLACE PARTITION, ATTACH PARTITION FROM의 경우 원본 테이블과 대상 테이블은 다음 조건을 충족해야 합니다.
- 동일한 컬럼 구조
- 동일한 파티션 키,
ORDER BY키 및 프라이머리 키 - 동일한 스토리지 정책
- 대상 테이블에는 원본 테이블의 모든 인덱스와 프로젝션이 포함되어야 합니다
예시
참고
- 파티션 및 파트 다루기
- 이 전략에 대해 자세히 알아보려면 블로그 게시물 대규모 ClickHouse 데이터 로드 가속화 - 3부: 대규모 데이터 로드를 안정적으로 처리하기를 참조하세요.