우노
[BigQuery] streaming buffer란? 본문
에러 코드
BigQuery Table에서 특정 레코드를 DELETE하려했지만, 아래 에러가 발생했습니다.
UPDATE or DELETE statement over table '' would affect rows in the streaming buffer, which is not supported
에러 발생 원인
- BigQuery는 데이터를 테이블에 영구적으로 저장하기 전에 스트리밍 버퍼(streaming buffer)라는 메모리 기반 저장소에 임시로 저장합니다.
- 높은 데이터 수신 속도를 제공하기 위함입니다.
- 에러 메시지는
UPDATE
또는DELETE
문이 스트리밍 버퍼에 있는 행을 수정하려 했기 때문에 발생한 에러입니다. - 스트리밍 버퍼에 있는 데이터는 아직 테이블에 완전히 반영되지 않았기 때문에 이러한 행에 대해 직접적인 수정 작업은 불가능합니다.
- 최근에 삽입한 데이터가 아니라면 이미 테이블로 반영됐기 때문에, 수정이 가능하며 위 에러 또한 발생하지 않습니다.
- 스트리밍 버퍼에 있는 최신 데이터는 일정 시간(최대 약 90분) 이후에 테이블에 반영됩니다.
에러 해결 방법
스트리밍 버퍼에 있는 데이터를 삭제하거나 수정하려면 다음 방법을 사용할 수 있습니다.
기다리기
- 스트리밍 버퍼에 있는 데이터가 테이블에 반영될 때까지 기다립니다.
임시 테이블 사용
-- 임시 테이블로 원본 데이터 복사 CREATE OR REPLACE TABLE mydataset.temp_table AS SELECT * FROM mydataset.original_table; -- 임시 테이블에서 수정 작업 수행 UPDATE mydataset.temp_table SET column_name = 'new_value' WHERE condition; DELETE FROM mydataset.temp_table WHERE condition; -- 임시 테이블에서 원본 테이블로 데이터를 병합 MERGE mydataset.original_table AS T USING mydataset.temp_table AS S ON T.id = S.id WHEN MATCHED THEN -- temp_table의 값으로 업데이트 UPDATE SET column_name = S.column_name WHEN NOT MATCHED BY SOURCE THEN -- original_table에 있고 temp_table에는 없는 행은 삭제 DELETE;
'GCP > Bigquery' 카테고리의 다른 글
[GCP] Bigquery 테이블 생성 with Python (0) | 2024.03.21 |
---|---|
[GCP] GCS → Bigquery with Python (0) | 2024.03.21 |
Comments