빅쿼리란
Bigquery란 Google Cloud Platform에서 제공하는 완전 관리형의 엔터프라이즈 데이터 웨어하우스이다.
대용량의 데이터를 저장하고 쿼리 및 분석하는 데 사용되며, 최근에는 Bigquery ML을 통해서 머신러닝 모델도 제공하고 있다.
완전 관리형이기 때문에 사용자가 인프라 관리에 대한 부담감 없으며,
가격의 경우에는 컴퓨팅(분석), 스토리지, 추가 서비스, 데이터 수집 및 추출을 기준으로 책정이 된다.
Bigquery는 GoogleSQL이라는 Google Standard SQL을 통하여 쿼리를 작성하여 결과를 얻는데,
확장 가능한 분산형 분석 엔진을 통해 테라파이트 급 쿼리를 초 단위로 수행하고, 페타바이트 급 쿼리를 분 단위로 쿼리 할 수 있다.
빅쿼리 특성
Bigquery가 이러한 성능을 낼 수 있는 기반에는 아래와 같은 특성 때문이다.
스토리지와 컴퓨팅의 분리된 아키텍쳐
Biquery 아키텍쳐는 위 사진과 같이 스토리지와 컴퓨팅이 분리되어있다. 이에 따라 필요시에 각각의 요소를 독립적으로 확장이 가능하다.
쿼리 실행 시에 쿼리 엔진이 여러 작업자에게 작업을 동시에 분산하여 스토리지에 분산되어 있는 데이터를 스캔하고 쿼리 하여 결과를 수집한다.
열 기반 형식의 스토리지 레이아웃
데이터를 열 기반으로 각 열을 개별적으로 저장하여, 특정 칼럼 조회 시 데이터 조회 양이 최소화 된다.
이러한 특성으로, 쿼리에 특정 열만 명시한 경우에 Bigquery는 모든 행의 모든 필드를 읽지 않고, 해당 열 데이터만 읽을 수 있다.
데이터 저장 관점에서도 행 보다 열 내의 데이터가 중복성이 높기 때문에 데이터 압축 효율도 좋아진다.
파티셔닝과 클러스터링
Partitioning(파티셔닝)
테이블을 파티션이라는 세그먼트로 분할하여 테이블 쿼리 시에 일치하는 파티션을 스캔하고 남은 파티션을 건너뜀으로 읽기 바이트 수를 줄일 수 있다.
파티션을 나눈 테이블에서 데이터는 데이터의 한 파티션을 포함하는 각 물리적 블록에 저장된다.
일반적으로 날짜, 시간 등으로 파티션을 하여 특정 기간의 데이터만 필터링하여 빠르게 쿼리 할 수 있다.
파티셔닝 된 테이블에서는 쿼리 실행 전에 쿼리 비용 추정치를 계산하여 알 수 있다.
Clustering(클러스터링)
클러스터링 된 열을 기준으로 스토리지 블록(데이터)을 정렬하여, 쿼리의 성능을 높여준다.
클러스터링 열 기준으로 필터링 또는 집계하는 쿼리의 경우,
전체 테이블 혹은 파티션 대신 클러스터링 된 열 기준으로 해당하는 블록만 스캔하여, 바이트 수를 줄 일 수 있다.
일반적으로 특정 열 기반으로 필터링하는 경우가 많거나, 필터링 열에 카디널리티(고유성)가 높다면 클러스터링 하는 것이 좋다.
파티셔닝 된 테이블과 달리 클러스터링 된 테이블 쿼리 시 정확한 쿼리 비용 예상치가 제공되지 않는다.
파티셔닝과 클러스터링은 함께 사용하여 쿼리 성능을 최적화할 수 있다.
결론
Bigquery는 고성능의 엔터프라이즈 데이터 웨어하우스이다.
Bigquery의 특성을 이해하고 적절한 파티션과 클러스터링을 통해 쿼리 성능을 높일 수 있다.
[참고 자료]
Bigquery 공식 문서 - https://cloud.google.com/bigquery?hl=ko