<@U0A71G31CDV> Insert Overwrite할때 파티션 컬럼 지정하지않으면 모...
# questions-and-troubleshooting
s
@Rocky Insert Overwrite할때 파티션 컬럼 지정하지않으면 모든 데이터가 날라가는거야?
r
네, StarRocks의 기본 동작 방식으로는 파티션 구문(
PARTITION (...)
)을 지정하지 않고 `INSERT OVERWRITE`를 실행하면 테이블 전체의 데이터가 영향을 받습니다.
구체적인 동작은 StarRocks 버전에 따라 다음과 같이 나뉩니다. 1. 기본 동작 (v3.4.0 미만 또는 설정 미사용 시) * 전체 파티션 대상: 파티션을 지정하지 않으면 테이블 전체를 덮어쓰는 것으로 간주합니다. * 데이터가 없는 파티션은 삭제: SELECT 문 결과에 포함된 데이터에 해당하는 파티션은 새 데이터로 교체되지만, 결과 데이터에 포함되지 않은 나머지 기존 파티션들은 모두 비워집니다(Truncated). * 결과적으로 의도치 않게 테이블의 상당수 데이터가 날아갈 수 있으므로 주의해야 합니다. 2. Dynamic Overwrite 기능 (v3.4.0 이상) v3.4.0부터는 전체 데이터를 날리지 않고, 데이터가 있는 파티션만 골라서 덮어쓰는 'Dynamic Overwrite' 기능을 지원합니다. * 동작 방식: 이 기능을 켜면 파티션을 명시하지 않아도 SELECT 결과에 포함된 파티션만 덮어쓰고, *나머지 파티션은 그대로 유지*됩니다. * 설정 방법: 세션 변수를 설정하거나 힌트를 사용합니다.
Copy code
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` 옵션을 사용*하는 것이 권장됩니다. Referencesloading/InsertInto.mdsql-reference/sql-statements/loading_unloading/INSERT.md