메인 콘텐츠로 건너뛰기

배경

파티셔닝은 테이블을 처음 정의할 때 PARTITION BY 절로 지정합니다. 이 절에는 임의의 컬럼에 대한 SQL 표현식을 포함할 수 있으며, 그 결과에 따라 각 행이 어느 파티션으로 보내질지가 결정됩니다. 데이터 파트는 디스크에서 각 파티션에 논리적으로 연결되며, 개별적으로 쿼리할 수 있습니다. 아래 예시에서는 toYear(CreationDate) 표현식을 사용해 posts 테이블을 연도별로 파티셔닝합니다. 행이 ClickHouse에 삽입되면 이 표현식이 각 행에 대해 계산되고, 그 결과에 해당하는 파티션이 이미 있으면 그 파티션으로 저장됩니다(해당 연도의 첫 번째 행이면 파티션이 생성됩니다).
 CREATE TABLE posts
(
        `Id` Int32 CODEC(Delta(4), ZSTD(1)),
        `PostTypeId` Enum8('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8),
        `AcceptedAnswerId` UInt32,
        `CreationDate` DateTime64(3, 'UTC'),
...
        `ClosedDate` DateTime64(3, 'UTC')
)
ENGINE = MergeTree
ORDER BY (PostTypeId, toDate(CreationDate), CreationDate)
PARTITION BY toYear(CreationDate)
파티션 표현식 설정에 대해서는 파티션 표현식 설정 방법 섹션을 참조하십시오. ClickHouse에서는 파티셔닝을 쿼리 최적화 기법이 아니라 주로 데이터 관리 기능으로 보는 것이 좋습니다. 키를 기준으로 데이터를 논리적으로 분리하면 각 파티션에 대해 독립적으로 작업할 수 있으며, 예를 들어 삭제할 수 있습니다. 이를 통해 시간 기준으로 파티션, 즉 데이터의 하위 집합을 스토리지 계층 간에 효율적으로 이동하거나 데이터를 만료시키거나 클러스터에서 효율적으로 삭제할 수 있습니다.

파티션 삭제

ALTER TABLE ... DROP PARTITION는 파티션 전체를 비용 효율적으로 삭제하는 방법입니다.
ALTER TABLE table_name [ON CLUSTER cluster] DROP PARTITION|PART partition_expr
이 쿼리는 해당 파티션을 비활성으로 표시한 뒤, 약 10분 내에 데이터를 완전히 삭제합니다. 이 쿼리는 복제되므로 모든 레플리카에서 데이터가 삭제됩니다. 아래 예시에서는 해당 파티션을 삭제하여 앞서 만든 테이블에서 2008년의 게시물을 제거합니다.
SELECT DISTINCT partition
FROM system.parts
WHERE `table` = 'posts'
┌─partition─┐
│ 2008      │
│ 2009      │
│ 2010      │
│ 2011      │
│ 2012      │
│ 2013      │
│ 2014      │
│ 2015      │
│ 2016      │
│ 2017      │
│ 2018      │
│ 2019      │
│ 2020      │
│ 2021      │
│ 2022      │
│ 2023      │
│ 2024      │
└───────────┘

17 rows in set. Elapsed: 0.002 sec.
ALTER TABLE posts
(DROP PARTITION '2008')
0 rows in set. Elapsed: 0.103 sec.
마지막 수정일 2026년 6월 10일