Data Science : Study/3. GCP & BigQuery

BigQuery : BigQuery 비용 문제 방지하기

신개념솔개 2022. 3. 8. 10:39
반응형

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 비용을 줄이기 위한 전략

반응형