Slackbot
06/11/2026, 4:41 AMRocky
06/11/2026, 4:41 AMUPDATE / MERGE INTO)
사용자가 기대하는 행 단위의 Upsert(이미 있으면 Update, 없으면 Insert) 작업은 아직 완벽하게 지원되지 않습니다.
* UPDATE / MERGE INTO: 현재(v4.1 기준) StarRocks의 Iceberg Catalog에서는 `UPDATE`와 MERGE INTO 구문을 직접적으로 지원하지 않습니다.
* 로드맵: 해당 기능은 StarRocks v4.2 이후 버전에서 지원될 예정으로 개발 중에 있습니다 (Iceberg v2의 Merge-on-Read 모델 기반).
3. 현재 구현 가능한 우회 방법 (Workaround)
직접적인 UPSERT 구문이 없더라도 다음과 같은 방법으로 구현할 수 있습니다.
1. INSERT OVERWRITE 사용:
데이터의 일부가 변경되었을 때, 해당 데이터가 속한 *파티션 전체를 다시 작성*하는 방식입니다. 대량의 데이터를 배치로 처리할 때 일반적인 방식입니다.
sql
INSERT OVERWRITE iceberg_table SELECT ... FROM source_table;
2. StarRocks Primary Key 테이블 활용:
실시간 Upsert가 빈번하게 발생한다면, 먼저 데이터를 StarRocks 내장 *Primary Key 테이블*로 로드(Upsert)한 뒤, 일정 주기로 Iceberg에 INSERT INTO 또는 `INSERT OVERWRITE`를 통해 동기화하는 아키텍처를 권장합니다.
3. 외부 엔진(Spark/Flink) 병행:
쓰기 작업(Upsert)은 Iceberg의 `MERGE INTO`를 지원하는 Spark나 Flink를 사용하고, StarRocks는 조회(Query) 및 분석용도로 사용하는 구성입니다.
요약
* MinIO 저장: 가능 (S3 호환).
* 행 단위 Upsert (MERGE INTO): 불가 (v4.2 이후 예정).
* 파티션 단위 Upsert (INSERT OVERWRITE): 가능.
* 데이터 삭제 (DELETE): v4.1부터 가능.
만약 실시간 Upsert 성능이 중요하다면 StarRocks의 내장 OLAP 테이블(Primary Key 모델)을 중간 저장소로 사용하는 것을 고려해 보세요.
References
• data_source/catalog/iceberg/DML.md
• loading/InsertInto.md
• data_source/catalog/iceberg/iceberg_timetravel.md