Sangwon
06/11/2026, 4:59 AMRocky
06/11/2026, 4:59 AMPARTITION (...))을 지정하지 않고 `INSERT OVERWRITE`를 실행하면 테이블 전체의 데이터가 영향을 받습니다.
구체적인 동작은 StarRocks 버전에 따라 다음과 같이 나뉩니다.
1. 기본 동작 (v3.4.0 미만 또는 설정 미사용 시)
* 전체 파티션 대상: 파티션을 지정하지 않으면 테이블 전체를 덮어쓰는 것으로 간주합니다.
* 데이터가 없는 파티션은 삭제: SELECT 문 결과에 포함된 데이터에 해당하는 파티션은 새 데이터로 교체되지만, 결과 데이터에 포함되지 않은 나머지 기존 파티션들은 모두 비워집니다(Truncated).
* 결과적으로 의도치 않게 테이블의 상당수 데이터가 날아갈 수 있으므로 주의해야 합니다.
2. Dynamic Overwrite 기능 (v3.4.0 이상)
v3.4.0부터는 전체 데이터를 날리지 않고, 데이터가 있는 파티션만 골라서 덮어쓰는 'Dynamic Overwrite' 기능을 지원합니다.
* 동작 방식: 이 기능을 켜면 파티션을 명시하지 않아도 SELECT 결과에 포함된 파티션만 덮어쓰고, *나머지 파티션은 그대로 유지*됩니다.
* 설정 방법: 세션 변수를 설정하거나 힌트를 사용합니다.
sql
-- 세션 전체 적용
SET dynamic_overwrite = true;
-- 특정 쿼리에만 적용
INSERT /_+set_var(dynamic_overwrite = true)_/ OVERWRITE my_table
SELECT * FROM source_table;
요약
* v3.4.0 미만: 파티션을 지정하지 않으면 데이터가 없는 파티션은 모두 삭제됩니다. (주의 필요)
* v3.4.0 이상: dynamic_overwrite = true 설정을 사용하면 데이터가 들어오는 파티션만 교체되고 나머지는 보존됩니다.
따라서 안전하게 특정 파티션만 바꾸고 싶다면 *`PARTITION (파티션명)`을 명시*하거나, v3.4.0 이상일 경우 *`dynamic_overwrite` 옵션을 사용*하는 것이 권장됩니다.
References
• loading/InsertInto.md
• sql-reference/sql-statements/loading_unloading/INSERT.md