삭제 개요

삭제 개요 (Delete overview)

ClickHouse에서 데이터를 삭제하는 방법은 여러 가지이며, 각각 장점과 성능 특성이 다릅니다. 데이터 모델과 삭제하려는 데이터 양에 따라 적절한 방법을 선택해야 합니다.

출처: 문서

본문

ClickHouse에서 데이터를 삭제하는 방법은 여러 가지가 있으며, 각각 장점과 성능 특성이 있습니다. 데이터 모델과 삭제하려는 데이터 양에 따라 적절한 방법을 선택해야 합니다.

방법 문법 언제 사용
경량 삭제 (Lightweight delete) DELETE FROM [table] 적은 양의 데이터를 삭제할 때. 행이 이후 모든 SELECT 쿼리에서 즉시 필터링되지만, 처음에는 내부적으로 삭제로 표시될 뿐 디스크에서 제거되지는 않습니다.
삭제 뮤테이션 (Delete mutation) ALTER TABLE [table] DELETE 데이터를 디스크에서 즉시 삭제해야 할 때(예: 규정 준수). SELECT 성능에 부정적 영향을 줍니다.
테이블 비우기 (Truncate table) TRUNCATE TABLE [db.table] 테이블의 모든 데이터를 효율적으로 제거합니다.
파티션 삭제 (Drop partition) DROP PARTITION 파티션의 모든 데이터를 효율적으로 제거합니다.

다음은 ClickHouse에서 데이터를 삭제하는 여러 방법의 요약입니다.

경량 삭제 (Lightweight deletes)

경량 삭제는 행을 즉시 삭제로 표시해 이후 모든 SELECT 쿼리에서 자동으로 필터링되게 합니다. 이 삭제된 행의 실제 제거는 자연 병합 주기 동안 발생하므로 I/O가 덜 듭니다. 그 결과, 특정하지 않은 기간 동안 데이터가 스토리지에서 실제로 삭제되지 않고 삭제로 표시만 될 수 있습니다. 데이터가 삭제됨을 보장해야 한다면 위의 뮤테이션 명령을 고려하세요.

-- delete all data from 2018 with a lightweight delete. Not recommended.
DELETE FROM posts WHERE toYear(CreationDate) = 2018

경량 DELETE 문으로 대량의 데이터를 삭제하는 것도 SELECT 쿼리 성능에 부정적 영향을 줄 수 있습니다. 이 명령은 프로젝션이 있는 테이블과도 호환되지 않습니다.

이 연산에는 삭제된 행을 표시(_row_exists 컬럼 추가)하는 뮤테이션이 사용되어 일부 I/O가 발생함을 주의하세요.

일반적으로, 디스크에 삭제된 데이터가 존재하는 것을 용인할 수 있다면(예: 규정 준수가 아닌 경우) 뮤테이션보다 경량 삭제를 선호해야 합니다. 이 접근 방식은 모든 데이터를 삭제해야 할 때는 여전히 피해야 합니다.

경량 삭제에 대해 더 읽어보세요: 경량 삭제 문서.

삭제 뮤테이션 (Delete mutations)

삭제 뮤테이션은 ALTER TABLE ... DELETE 명령으로 발행할 수 있습니다. 예:

-- delete all data from 2018 with a mutation. Not recommended.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018

이것들은 동기적으로(비복제일 때 기본) 또는 비동기적으로(mutations_sync 설정에 따라) 실행될 수 있습니다. 이것들은 매우 I/O가 많아 WHERE 표현식과 일치하는 모든 파트를 다시 씁니다. 이 과정에는 원자성이 없습니다 — 파트가 준비되는 대로 뮤테이션된 파트로 대체되고, 뮤테이션 중에 실행을 시작한 SELECT 쿼리는 이미 뮤테이션된 파트의 데이터와 아직 뮤테이션되지 않은 파트의 데이터를 함께 보게 됩니다. 사용자는 system.mutations 테이블로 진행 상태를 추적할 수 있습니다. 이것은 I/O 집약적 연산이며, 클러스터 SELECT 성능에 영향을 줄 수 있으므로 아껴 사용해야 합니다.

삭제 뮤테이션에 대해 더 읽어보세요: 삭제 뮤테이션 문서.

테이블 비우기 (Truncate table)

테이블의 모든 데이터를 삭제해야 한다면 아래의 TRUNCATE TABLE 명령을 사용하세요. 이것은 가벼운 연산입니다.

TRUNCATE TABLE posts

TRUNCATE TABLE에 대해 더 읽어보세요: Truncate 문서.

파티션 삭제 (Drop partition)

데이터에 커스텀 파티셔닝 키를 지정했다면 파티션을 효율적으로 삭제할 수 있습니다. 높은 카디널리티 파티셔닝은 피하세요.

ALTER TABLE posts (DROP PARTITION '2008')

DROP PARTITION에 대해 더 읽어보세요: 파티션 삭제 문서.

더 많은 자료

더 알아보기 (Learn more)