This message was deleted.
# questions-and-troubleshooting
s
This message was deleted.
r
StarRocks + Iceberg + MinIO 조합에서 Upsert(데이터 업데이트 및 삽입) 기능을 사용하는 것은 현재 StarRocks의 버전에 따라 지원 범위가 달라집니다. 1. 현재 지원되는 DML 작업 (v3.x ~ v4.1 기준) * INSERT INTO: 데이터를 Iceberg 테이블에 추가(Append)할 수 있습니다. (v3.1부터 지원) * INSERT OVERWRITE: 특정 파티션이나 전체 테이블의 데이터를 덮어쓰는 방식으로 "Upsert"와 유사한 효과를 낼 수 있습니다. * DELETE: Iceberg v2 테이블에 대해 조건부 데이터 삭제가 가능합니다. (v4.1부터 공식 지원) * MinIO 호환성: MinIO는 S3 호환 스토리지로서 StarRocks Iceberg Catalog의 스토리지 백엔드로 완벽하게 지원됩니다. 2. 행(Row) 단위 Upsert (
UPDATE
/
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 사용: 데이터의 일부가 변경되었을 때, 해당 데이터가 속한 *파티션 전체를 다시 작성*하는 방식입니다. 대량의 데이터를 배치로 처리할 때 일반적인 방식입니다.
Copy code
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 모델)을 중간 저장소로 사용하는 것을 고려해 보세요. Referencesdata_source/catalog/iceberg/DML.mdloading/InsertInto.mddata_source/catalog/iceberg/iceberg_timetravel.md