ALTER TABLE ... DELETE
ALTER TABLE ... DELETE
지정된 필터링 표현식과 일치하는 데이터를 삭제하는 구문이에요. 이 작업은 mutation으로 구현됩니다.
출처: 문서
본문
ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE [IN PARTITION partition_expr1 [, partition_expr2 ...]] WHERE filter_expr
지정된 필터링 표현식과 일치하는 데이터를 삭제해요. 이 작업은 mutation으로 구현됩니다.
ALTER TABLE 접두사는 OLTP 데이터베이스의 유사한 쿼리와 달리 이 작업이 무거운(heavyweight) 작업임을 나타내요. ALTER TABLE ... DELETE는 필터링 표현식과 일치하는 행을 포함하는 모든 데이터 파트를 다시 쓰므로 상당한 쓰기 I/O가 발생해요. SELECT 성능에 영향을 줄 수 있으니 아껴서 사용해야 합니다.
MergeTree 테이블의 경우, 가벼운 삭제(lightweight delete)를 수행하고 훨씬 빠를 수 있는 DELETE FROM 쿼리를 사용하는 것을 고려해 보세요. 자주 삭제하거나 수정해야 하는 워크로드라면 ReplacingMergeTree나 CollapsingMergeTree를 사용하는 것도 고려해 볼 만해요.
filter_expr는 UInt8 타입이어야 해요. 이 표현식이 0이 아닌 값을 취하는 테이블의 행이 쿼리에 의해 삭제됩니다.
하나의 쿼리는 쉼표로 구분된 여러 개의 명령을 포함할 수 있어요.
IN PARTITION 절은 mutation을 나열된 파티션으로 제한해요. 이것이 없으면 ReplicatedMergeTree 계열 테이블에서 optimize_mutations_with_partition_pruning 설정(기본값)이 활성화되어 있을 때, ClickHouse가 filter_expr 안의 파티션 키 조건을 자동으로 감지하여 영향을 받는 파티션만 변형해요. 비복제 MergeTree 테이블에서는 mutation을 특정 파티션으로 제한하려고 명시적인 IN PARTITION 절을 사용해야 합니다.
쿼리 처리의 동기성(synchronicity)은 mutations_sync 설정에 의해 결정돼요. 기본적으로 비동기적으로 동작합니다.
참고하세요.