<@U0A71G31CDV> broker load가 비동기로 실행되잖아. 그래서 s3에 파...
# questions-and-troubleshooting
s
@Rocky broker load가 비동기로 실행되잖아. 그래서 s3에 파일올리고 broker load하고 s3파일 지우면 일부만 올라가다가 말거든? 명시적으로 내가 지우지않고 broker load작업이 끝나면 지우게도 가능한가?
r
StarRocks의 *Broker Load는 비동기(Asynchronous) 방식*으로 동작하기 때문에, 작업을 제출(Submit)한 직후 바로 S3 파일을 삭제하면 데이터 로딩이 완료되지 못하고 실패하게 됩니다. 현재 StarRocks의 Broker Load 자체에는 로딩 완료 후 원본 파일을 자동으로 삭제해 주는 내장 옵션은 없습니다. (일부 타 시스템의
PURGE
같은 기능이 없습니다.) 이 문제를 해결하기 위해 권장되는 방법들은 다음과 같습니다: 1. 로드 상태 모니터링 후 삭제 (권장) 가장 확실한 방법은 로드 작업의 상태를 주기적으로 체크(Polling)하여
FINISHED
상태가 된 것을 확인한 후 삭제 명령을 내리는 것입니다. * v3.1 이상:
information_schema.loads
뷰를 조회하여 편리하게 상태를 확인할 수 있습니다.
Copy code
sql
    SELECT STATE FROM information_schema.loads WHERE LABEL = 'your_label';
* 공통:
SHOW LOAD
명령을 사용합니다.
Copy code
sql
    SHOW LOAD WHERE LABEL = 'your_label';
상태가 `FINISHED`라면 S3에서 안전하게 파일을 지워도 됩니다. 2. 동기식 로딩 방식 사용 (INSERT INTO FILES) 만약 파일 크기가 아주 크지 않다면(보통 10GB 미만), 비동기인 Broker Load 대신 *동기(Synchronous) 방식*인 `INSERT INTO ... SELECT FROM FILES()`를 사용하는 것이 좋습니다. * 이 방식은 쿼리가 끝날 때까지 클라이언트가 대기하므로, *쿼리가 성공적으로 반환된 직후에 바로 S3 파일을 지우는 스크립트를 실행*하면 됩니다. 별도의 상태 체크 로직이 필요 없어 구현이 단순해집니다. 3. S3 수명 주기 정책(Lifecycle Policy) 활용 명시적으로 지우는 코드를 짜기 번거롭다면, S3 버킷의 *Lifecycle Rule*을 설정하는 것이 가장 깔끔할 수 있습니다. * 로딩용으로 사용하는 특정 경로(Prefix)에 대해 "생성 후 1일 뒤 삭제" 같은 규칙을 걸어두면, 별도로 지우지 않아도 자동으로 정리됩니다. 4. StarRocks Pipe 사용 (v3.2+) 최신 버전의 Pipe 기능을 사용하면 파일의 로딩 상태를 내부적으로 기록하고 관리합니다. * Pipe는 어떤 파일이 로드되었는지 기억하기 때문에, 파일을 바로 지우지 않고 나중에 일괄적으로 지워도 중복 로딩을 방지할 수 있어 관리 부담이 적습니다. 요약하자면: StarRocks가 자동으로 지워주는 옵션은 없으므로, *`INSERT INTO FILES`를 써서 동기 방식으로 처리*하거나, *`SHOW LOAD`로 상태를 확인한 후 삭제*하는 로직을 스크립트에 추가하셔야 합니다. References • loading/hdfs_load.md • loading/s3.md • loading/loading_introduction/loading_concepts.md • sql-reference/sql-statements/loading_unloading/pipe/DROP_PIPE.md