일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BigQuery
- explode
- 프로그래머스 파이썬
- airflow
- 시각화
- 로컬 pyspark
- Docker error
- tableau
- PySpark
- 도커exec
- 빅쿼리
- spark #스파크
- dataframe
- 데이터 시각화
- Big Query
- spark df
- ifkakao2020
- 도커오류
- spark explode
- sparkdf
- 빅쿼리 튜닝
- pyspark오류
- DataFrame Spark
- 비주얼라이제이션
- 태블로
- SparkSQL
- docker
- 데이터엔지니어링
- 코테
- 도커
- Today
- Total
SOGM'S Data
2) 구글 빅쿼리 튜닝 (Big Query) 본문
회사에서 구글 GCP의 빅쿼리를 접하게되었습니다.
빠른 속도와 구글의 다양한 서비스와 접목 시킨다는 것이 강점이었습니다.
제가 생각하는 빅쿼리의 장점
1) 빠른속도, 병렬처리 -- ★
2) 다양한 서비스, 프로젝트와 연계
- CSV, 스프레드시트, 태블로, APachairflow 등
단점
1) 비싸다. 개인이 사용할 수 없는 수준 (슬롯형, 데이터를 얼마나 쓰냐에 따라 금액 청구)
*아래 내용은 (이야기로 배우는 구글 빅쿼리)를 기반으로 공부한 내용과 구글링을 통한 내용을 정리하였습니다
< 빅쿼리 비용절감 프로세스>
1. SELECT * 사용 X
- 빅쿼리는 열 지향 스토리지이기 때문에 SELECT * 보다는 특정 열을 호출해주는게 좋습니다.
*열지향 스토리지란: 기존 관계형데이터베이스(RDB)가 1행 단위로 데이터를 보관하고 있지만 빅쿼리의 열지향 스토리지는 열단위로 망져 데이터를 보관함. ColumnIO에 의해 열마다 데이터를 압축하는데 동일 열에는 동일 데이터형 정보가 등록되어 있어 압축효율이 좋음
2. 파티션, 클러스터화 테이블 사용하기
* 파티션 분할 테이블이란: 테이블안에 여러 파티션을 정의할 수 있는 테이블. Ex. sdate
- 파티션 분할테이블의 장점: 파티션 단위 데이터 로딩, 쿼리, 내보내기 가능
* 클러스터화 테이블이란: 지정하 클러스터화 테이블의 대상 열에 근거하여 데이터 배열장소나 나열 순서가 조정되는 테이블이다.
- 클러스터화 테이블의 장점: WHERE 구문에 클러스터링 열을 지정한 경우 불필요한 데이터는 스캔을 생략함. 쿼리비용 줄일 수 있음. 파티션 분할테이블만 클러스터화 할 수 있음. 클러스터화 테이블 자성 후 클러스터링 열 변경시 테이블 새롭게 작성해야해서 주의해야함.
3. 사양상 가능시 캐시 활성화: 높은 캐시 히트율 예상되면 캐시 활성화로 쿼리 결과 고속 반환가능
4. 미리보기 사용하기
- 미리보기는 비용이 발생하지않는다.
5. 사전에 쿼리 크기 확인하기.
빅쿼리는 실행할 때 유효한쿼리가 입력되면 오른쪽에 쿼리크기가 표시된다.
6.쿼리 비용을 제한하기 위한 청구 가능 최대 크기 설정
7. 일시적 테이블 사용하기
- 서브쿼리의 부분을 먼저 일시적인 테이블로 만들어두고 일시적인 테이블에 대한 메인쿼리를 실행하는 방법을 사용함으로써 실행때마다 서브쿼리 요금 발생을 없앨 수 있다.
8. ORDER BY 지양
9. Sturct 형과 array 형 적극 활용하기
관련 링크: https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays?hl=ko
10. 빅쿼리 슬롯
* 슬롯이란 처리의 병렬도를 뜻하는데 , 빅쿼리는 쿼리 실행시 쿼리를 분할해 병렬로 실행하는 처리를 슬롯단위로 나타낸다.
쿼리가 느리다면 1) 슬롯 사용 수가 적다. 2) 동시 실행 슬롯 수를 초과해서 쿼리가늦어진다. 때문에 슬롯을 늘려야할 수 있다.
* 내 쿼리의 슬롯 사용 확인 방법은콘솔 shell에서 명령어로 확인가능하다.
$ bq -location[위치] ls -j -n[표시행수]
/* 위치는 리전이 들어감 서울이라면 asia-northeast3 , 표시행 수는 기본값이 50행이다. 필요 행수 지정 */
$ bq --format=prettyjson show -j [작업ID]
/* 작업ID는 쿼리 고유의 작업 ID */
'About Data > SQL' 카테고리의 다른 글
SQL _ 실행계획 순서 (0) | 2022.01.17 |
---|---|
1) SQL 코드정리 사이트 (0) | 2021.05.31 |