<@U0A71G31CDV> stream load쓰면 upsert로 작동해?
# questions-and-troubleshooting
s
@Rocky stream load쓰면 upsert로 작동해?
r
네, Stream Load를 사용할 때 Upsert(Update + Insert)로 작동하는지는 사용하는 테이블 모델에 따라 다릅니다. 결론부터 말씀드리면, *Primary Key 테이블*이나 *Unique Key 테이블*을 사용하면 자동으로 Upsert로 작동합니다. 1. Primary Key 테이블 (가장 권장됨) StarRocks에서 실시간 Upsert가 가장 최적화된 모델입니다. * 작동 방식: 데이터 로드시 동일한 Primary Key를 가진 행이 있으면 기존 데이터를 *업데이트*하고, 없으면 새로운 행을 *추가*합니다. * 설정: 별도의 옵션 없이 Stream Load를 실행하면 기본적으로 UPSERT로 처리됩니다. * 삭제: 데이터에 삭제 플래그가 있는 경우
__op
파라미터를 사용하여 특정 행을 삭제하도록 지정할 수도 있습니다. 2. Unique Key 테이블 * 작동 방식: Primary Key 모델과 유사하게 키 값이 중복되면 기존 데이터를 대체(Replace)하여 Upsert 효과를 냅니다. 3. Duplicate Key 테이블 (Upsert 불가) * 작동 방식: 중복을 허용하고 모든 데이터를 단순 추가(Append)만 합니다. Upsert가 발생하지 않으며 동일한 데이터가 계속 쌓입니다. 4. Aggregate Key 테이블 * 작동 방식: 특정 컬럼을
REPLACE
집계 함수로 설정하면, 키가 겹칠 때 해당 컬럼 값을 새 값으로 덮어쓰는 방식으로 Upsert와 비슷하게 동작할 수 있습니다. ────────── Stream Load 실행 시 참고 사항: Primary Key 테이블에서 명시적으로 Upsert임을 지정하고 싶다면 HTTP 헤더에 다음과 같이 포함할 수 있습니다 (기본값이므로 생략 가능):
Copy code
bash
-H "columns: __op='upsert'"
요약하자면: Stream Load 자체는 데이터를 밀어넣는 수단이며, 실제 *Upsert 여부는 데이터를 받아주는 테이블의 모델(Primary Key 등)에 의해 결정*됩니다. Upsert가 필요하시다면 테이블 생성 시 `PRIMARY KEY`를 정의해 사용하세요. Referencesloading/Load_to_Primary_Key_tables.md