Sangwon
06/18/2026, 8:34 AMRocky
06/18/2026, 8:34 AMVARCHAR 타입의 yyyymmdd 형식 컬럼(dt)을 사용하여 파티션을 관리하는 방법은 크게 두 가지가 있으며, 사용하시는 버전에 따라 권장하는 방식이 다릅니다.
1. 자동 파티션 생성 (Automatic Partitioning)
v3.1부터 지원되는 Expression Partitioning 기능을 사용하면 VARCHAR 타입 컬럼으로도 데이터 로딩 시 파티션을 자동으로 생성할 수 있습니다.
sql
CREATE TABLE example_table (
dt VARCHAR(8) NOT NULL,
id INT,
data VARCHAR(100)
)
DUPLICATE KEY(dt, id)
PARTITION BY (dt) -- dt 값에 따라 파티션 자동 생성
DISTRIBUTED BY HASH(id);
* 특징: 별도의 dynamic_partition 속성을 설정하지 않아도, 20231027 같은 값이 들어오면 `p20231027`이라는 파티션이 자동으로 만들어집니다.
* 주의: 이 방식은 단순히 문자열 값에 기반하므로, '미래 파티션 미리 생성'이나 '오래된 파티션 자동 삭제(TTL)' 같은 정교한 시간 기반 관리가 어려울 수 있습니다. (v3.5 이상에서는 `partition_retention_condition`으로 보완 가능)
2. 함수 기반 파티셔닝 (v3.3 이상 권장)
문자열(yyyymmdd)을 날짜처럼 인식하게 하여 *Dynamic Partitioning(속성 기반 관리)*의 이점을 누리고 싶다면 str2date 함수를 사용하는 것이 가장 좋습니다.
sql
CREATE TABLE example_table (
dt VARCHAR(8) NOT NULL,
...
)
PARTITION BY RANGE (str2date(dt, '%Y%m%d')) (
START ("2024-01-01") END ("2024-01-10") EVERY (INTERVAL 1 DAY)
)
PROPERTIES (
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "3" -- 3일치 파티션 미리 생성
);
* v3.3 이전: Dynamic Partitioning은 기본적으로 DATE 또는 DATETIME 타입 컬럼만 지원했습니다. `VARCHAR`는 직접적으로는 dynamic_partition 속성이 정상 작동하지 않을 수 있습니다.
* v3.3 이후: 위 예시처럼 str2date 함수를 통해 `VARCHAR`를 날짜로 변환하여 파티션을 정의하면, 기존의 Dynamic Partitioning 속성(start, end 등)을 그대로 활용할 수 있습니다.
요약
* 단순히 파티션이 생기기만 하면 된다면: `PARTITION BY (dt)`를 사용하세요. (v3.1+)
* 미리 생성하거나 자동 삭제(TTL) 기능이 필요하다면:
* 가급적 dt 컬럼 타입을 `DATE`로 바꾸는 것이 가장 깔끔합니다.
* `VARCHAR`를 유지해야 한다면 v3.3 이상의 str2date 기반 Range Partition 설정을 권장합니다.
* *v3.3 미만 버전*에서 VARCHAR 컬럼에 `dynamic_partition.enable`을 직접 걸면, FE에서 날짜 계산을 못해 에러가 발생하거나 파티션 생성이 안 될 수 있습니다.
References
• faq/Sql_faq.md
• table_design/data_distribution/dynamic_partitioning.md
• table_design/data_distribution/expression_partitioning.md
• table_design/data_distribution/Data_distribution.mdSangwon
06/18/2026, 8:39 AMRocky
06/18/2026, 8:39 AMdynamic_partition 설정을 하지 않아도 "자동 파티션 생성(Automatic Partitioning)" 기능이 적용됩니다.
StarRocks v3.1부터 도입된 이 기능은 기존의 Dynamic Partitioning(주기적으로 미리 생성하는 방식)과는 동작 방식이 다르지만, 결과적으로 파티션을 자동 관리해준다는 점은 같습니다.
1. 동작 방식 (Automatic Partitioning)
* 시점: 데이터가 *로딩(INSERT, STREAM LOAD 등)되는 시점*에 해당 값에 맞는 파티션이 없으면 StarRocks가 즉석에서 파티션을 생성합니다.
* 설정: PROPERTIES ("dynamic_partition.enable" = "true") 같은 추가 설정이 필요 없습니다.
* 결과: dt 값이 `'20231027'`인 데이터를 넣으면, str2date 함수가 이를 2023-10-27 날짜로 변환하고, 해당 날짜에 맞는 파티션을 자동으로 만듭니다.
2. 주의사항 및 권장 사항
1. 함수 인자: str2date(dt) 처럼 인자를 하나만 쓰면 형식을 알 수 없어 에러가 날 수 있습니다. 반드시 str2date(dt, '%Y%m%d') 형식을 사용하세요.
2. 데이터 타입: str2date 결과는 DATE 타입이므로, 날짜 기반의 파티션 관리가 가능해집니다.
3. 버전 확인: 이 기능은 *v3.1 이상*에서 지원됩니다.
4. 보관 정책(TTL): 자동 생성된 파티션을 일정 기간 후 자동으로 지우고 싶다면, v3.5부터 지원되는 partition_retention_condition 속성을 함께 사용하는 것이 좋습니다. (이전 버전에서는 자동 삭제를 위해 별도의 관리가 필요할 수 있습니다.)
3. 기존 Dynamic Partitioning과의 차이점
* 기존 방식 (dynamic_partition.enable): FE가 백그라운드에서 스케줄에 따라 파티션을 미리 만들어둡니다.
* 현재 방식 (PARTITION BY 표현식): 데이터가 들어올 때 필요한 파티션을 만듭니다.
결론적으로, `str2date`를 사용한 표현식 파티셔닝은 "자동으로 파티션을 생성"해준다는 목적을 달성하므로, 의도하신 대로 파티션 관리가 자동화됩니다.
References
• table_design/data_distribution/expression_partitioning.md
• table_design/data_distribution/Data_distribution.md
• sql-reference/sql-statements/materialized_view/CREATE_MATERIALIZED_VIEW.md
References
• table_design/data_distribution/expression_partitioning.md
• table_design/data_distribution/dynamic_partitioning.md
• sql-reference/sql-statements/materialized_view/CREATE_MATERIALIZED_VIEW.md
• table_design/data_distribution/Data_distribution.md