BigQuery : BigQuery 비용 문제 방지하기
BigQuery는 저장소의 비용은 저렴하지만, 빈번한 select 이용 시 많은 비용이 발생할 수 있다.
1. 비용 측정기 활용
GCP에서 쿼리를 입력하면 예상 비용을 알 수 있다.
2. LIMIT 사용하지 말 것
BigQuery는 데이터를 테이블 단위가 아닌 column 단위로 저장하기 때문에, column의 윗 부분만 읽고자 해도 해당 column 전체를 가져온다.
그래서 가져오는 데이터가 적어도 큰 비용이 발생할 수 있다.
→ 리소스 > 프로젝트 > 데이터셋 > 테이블 선택하여 테이블 내용 미리보기가 가능(order by 는 불가)
3. 필요한 컬럼만 SELECT
매번 제대로 신경쓰지 못할 수 있어 사용 자제할 것
4. 파티션 이용
불필요한 부분은 읽지 않는 것으로, RDBMS의 INDEX와 비슷하다.
1. 파티션 테이블 만들기
- 빈 테이블에서 시작할 때 : 파티션을 나누는 컬럼 설정 (테이블 생성 화면에서)
설정할 수 있는 컬럼
- 수집시간 : 파티션 및 클러스터 설정, 에서 "내부 데이터화 시간으로 파티션 나누기" 선택
- 날짜/타임스탬프 : 해당 필드명을 선택
- 이미 있는 테이블을 파티션 테이블로 변경할 때 : 기존 테이블은 삭제되고 새로운 파티션 테이블이 생성된다.
CREATE TABLE [schema-name].[new-table-name];
PARTITION BY DATE([timestamp-column])
AS SELECT * FROM [schema-name].[table-name];
DROP TABLE [schema-name].[table-name];
### string 형태로 되어있는 datastamp를 파티션키로 사용하고 싶은 경우
CREATE TABLE [new-table-name];
PARTITION BY DATE(str_ymd) AS SELECT *
EXCEPT(str_ymd), PARSETIMESTAMP('%Y-%m-%d %H:%M:%S',str_ymd) AS yyyymmdd
FROM [schemaa-name].[table-name];
DROP TABLE [schema-name].[table-name];
2. 파티션 컬럼
- 날짜 형태의 Column만 제공(2021.06 기준, int도 제공하나 제약이 아주 많다)
- 파티션 컬럼을 가공하지 않고 사용해야 파티션 기능이 발휘된다.
- 파티션 컬럼은 1개만 사용 가능
- 다른 컬럼을 사용하고 싶은 경우, 먼저 파티션 컬럼으로 범위를 줄이고 해당 컬럼을 사용하면 비용을 낮출 수 있다.
** 참고
파티션 테이블 만들기 [GCP] BIG QUERY 빅쿼리 partition table 만들기
파티션 컬럼 활용 big query 비용을 줄이기 위한 전략