Codeit Sprint/Weekly_Paper

위클리 페이퍼 #17 - BigQuery에서 쿼리 성능을 최적화

ko_sick 2024. 12. 9. 00:53

 

BigQuery에서 쿼리 성능을 최적화하는 방법은 여러 가지가 있으며, 데이터 구조와 쿼리 패턴을 효과적으로 설계하는 것이 중요합니다. 아래는 주요 전략들입니다:

1. 데이터 스캔 최소화

  • 파티셔닝과 클러스터링: 데이터를 날짜, 범주 등으로 파티셔닝하여 필요한 데이터만 읽도록 합니다. 클러스터링을 통해 특정 열을 기준으로 데이터를 정렬하면 쿼리 비용과 실행 시간이 감소합니다.
  • SELECT 최적화: 필요한 열만 선택합니다. SELECT *를 피하고 특정 열을 명시하여 비용과 처리 시간을 줄입니다.

2. 쿼리 작성 최적화

  • 조인 순서와 유형: 작은 테이블을 왼쪽에 두어 Broadcast Join을 활용하거나, 큰 테이블 간 조인 시 Hash Join을 사용합니다. 데이터 크기가 비대칭적일 경우, 미리 필터링하거나 WHERE 조건을 사용해 조인 데이터 양을 줄입니다.
  • 윈도우 함수 사용: 반복적 셀프 조인을 대체할 수 있으며, 연산 속도를 크게 향상시킵니다.

3. 반복 작업 방지

  • 자주 사용하는 데이터 전처리 작업은 중첩된 쿼리로 작성하거나 임시 테이블에 저장해 재사용합니다. 매번 계산하지 않도록 설계합니다.

4. 중첩 데이터 활용

  • BigQuery의 ARRAY나 STRUCT 같은 중첩 데이터를 활용하면 스키마 유연성과 쿼리 성능을 동시에 개선할 수 있습니다.

5. 쿼리 계획 확인 및 수정

  • 쿼리를 실행하기 전에 EXPLAIN 명령으로 실행 계획을 확인하고, 비용이 높은 작업을 최적화합니다.

6. 캐시 활용

  • 동일한 데이터를 여러 번 쿼리해야 한다면 캐시를 사용하거나 결과를 테이블로 저장해 반복 실행 비용을 줄입니다.

7. 표준 SQL 사용

  • BigQuery의 Standard SQL은 Legacy SQL보다 성능이 우수하므로 이를 사용하도록 설정합니다.

- 개인적으로는 쿼리의 행의 수가 많거나 데이터 테이블의 크기가 큰경우에는 ORDER BY의 DESC, ASC를 하는 경우에 기초적으로 세팅된 서버 사용시간 30초를 넘기는 경우가 생겨서 보는데 어려움이 따랐습니다.

 

- 참고자료 1 : https://na0-0.tistory.com/166

- 참고자료 2 : https://velog.io/@suminwooo/%EA%B5%AC%EA%B8%80-%EB%B9%85%EC%BF%BC%EB%A6%AC-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-6