Data/Bigdata

Google Cloud Platform의 BigQuery 소개

안녕하세요 (주)씨앤텍시스템즈 신윤중 연구원 입니다.

이번 글에선 GCP(Google CLoud Platform)에서 제공하는 강력한 데이터 분석 도구중에 하나인 BigQuery에 대해 소개하려고 합니다.

BigQuery는 대용량 데이터에 대한 scaling 분석을 지원하며, 클라우드 서비스로 제공되는 server-less 완전 관리형 컴퓨팅 데이터 웨어하우스 도구입니다. scailing한 특징은 사용자의 작업 요청량에 따라 실시간으로 컴퓨팅 리소스를 동적할당 합니다. 이에 따라 사용자는 비용의 기준이 되는 클라우드 서비스의 컴퓨팅 리소스를 효율적으로 활용할 수 있습니다. 그리고 클라우드로 제공되는 서비스를 이용함으로써 server-less 운영환경을 가질수 있고, 클라우드에 저장된 데이터의 메타데이터를 완전하게 관리합니다.


BigQuery 개요

BigQuery의 주요 특징을 간단하게 요약하면 아래와 같습니다.

  • 클라우드 서비스
    • BigQuery는 클라우드 환경에서 제공되는 서비스로 시스템 구축을 위한 설치/운영이 필요없음
    • GCP의 타 제품과 호환, 연계성이 좋음
    • 표준 통신 방식(REST 등)을 지원하며, 사용하기 용이함
  • SQL 언어 사용
    • ANSI 표준 SQL 문법 기반의 명령어 수행 가능
    • BigQuery자체의 확장 기능 구문을 사용할 수 있음
    • 사용자 정의함수(UDF) 정의 가능
  • 클라우드 스케일의 인프라
    • 대용량 데이터 처리 지원과 빠른 성능
더보기

클라우드 스케일의 인프라를 사용할 수 있다는 장점은 대용량 데이터를 처리하는 사례를 가져와 설명드려볼까 합니다.

 

BigQuery로 wiki 페이지 데이터를 저장한 테이블을 스캐닝하는 작업을 수행하는 상황입니다. 간단하게 설명하면 title 문자열이 "G.*o.*o.*g" 정규식에 매칭되는 wiki 페이지의 조회 수를 집계하는 작업입니다.

스캐닝 하려는 테이블은 약 7Tb크기, 100billions개 레코드를 저장하고 있고, 30초 동안 사용된 컴퓨팅 자원은 아래와 같습니다.

 

- 100MB/sec속도로 데이터를 읽는 hard-drive 330개

- 330Gb의 네트워크 통신

- 100 billion/μsec속도로 정규식을 처리하는 3,300개의 core process

 

해당 분석에 사용된 우리의 비용은 30초라는 시간과 $20의 경제적 가치입니다.

 

(참조: How fast is BigQuery?, https://cloud.google.com/blog/products/bigquery/anatomy-of-a-bigquery-query, 2016-01)

  • 데이터 복제를 통한 안정성
    • 블록복제 및 분산 저장
  • 배치/스트리밍 지원
    • 대용량 데이터를 bulk로 import하는 배치 작업
    • 실시간 데이터를 전송하는 스트리밍 작업
  • 비용 정책
    • 저장한 데이터 사이즈와 쿼리 작업을 수행할 때 발생하는 transaction 만큼의 비용 발생
    • transaction은 Query를 수행할 때 스캔하는 데이터를 기준으로 비용 발생
      • columnar방향의 스캐닝 방식으로 모든 columns을 로드하는 (SELECT *)경우가 아니라면 비교적 적은 비용이 발생한다고 합니다.
      • columnar방향 스캐닝으로 인해 대용량 데이터 처리 속도가 빠름

 

BigQuery 리소스

그림 1. BigQuery 리소스의 계층 구조

BigQuery 서비스에 포함되는 리소스는 그림 1과 같이 계층적 구조를 가집니다. 프로젝트와 데이터셋은 개념적 집합(namespace와 같은)으로 이해하시면 됩니다. 실제로 우리가 스캔하고 처리하는 데이터는 Table, Views와 같은 리소스입니다. 데이터 객체 뿐만 아니라 우리가 명령을 내리는 행위인 Jobs도 리소스 개념으로 정의됩니다. 따라서 과거에 작업한 Job을 저장할 수도 있고, Job에 대한 사용자의 접근 권한을 제어할 수도 있습니다.

 

  • 프로젝트
    • 모든 Google Cloud의 리소스(데이터, 서비스, 작업 등)는 프로젝트라는 개념적 집합에 포함되어야 함
    • BigQuery와 관련된 프로젝트는 모든 BigQuery 리소스의 컨테이너 역할을 수행
    • BigQuery는 데이터 저장소와 컴퓨팅 엔진을 분리하여 관리될 수 있으므로, 데이터와 BigQuery엔진이 각각 다른 프로젝트에 포함될 수 있음
  • 데이터 세트
    • 데이터 세트는 BigQuery 테이블 및 뷰를 구성하는 최상위 컨테이너
    • 일반적으로 RDB나 DW의 스키마에 대응됨
    • 프로젝트로 범위가 지정되며 테이블을 명시하는 경우 PROJECT.DATASET.TABLE과 같이 .(dot)를 구분자로 사용하여 하위 리소스 식별
    • 데이터 세트 생성시 위치(물리적으로 데이터가 저장되는 cloud location)를 설정할 수 있고, 여러 테이블/뷰를 포함할 수 있음
  • 테이블
    • BigQuery 테이블은 데이터를 보관하는 행/열의 구조를 의미함
    • 열 이름, 데이터 타입, 기타 정보를 포함하는 스키마로 정의됨
  • 작업
    • 데이터 로드, 내보내기, 쿼리, 복사를 위해 BigQuery가 실행하는 작업
    • 데이터 지역성 요구조건의 제한을 받음

 

BigQuery 웹 콘솔 사용환경

간단하게 BigQuery의 화면을 참조해서 기본적인 구성과 동작, 역할을 살펴보겠습니다.

그림 2. BigQuery 웹 콘솔 사용환경 예시

그림 2는 BigQuery 서비스의 메인 콘솔 화면입니다. 1. 리소스 뷰 패널에서 프로젝트 목록과 각 프로젝트에 포함된 리소스 데이터 목록을 탐색할 수 있습니다. 2. 쿼리 영역에서 SQL명령어 스크립트를 작성할 수 있고, 3. 쿼리 결과에서 해당 SQL스크립트 결과를 출력합니다. 마지막으로 4. 쿼리 로그 및 관리 패널에서는 BigQuery에서 수행한 작업이나 쿼리 로그를 확인할 수 있고 SQL스크립트를 저장/삭제하는 기능을 제공합니다.

 

그림 3. 쿼리 결과 패널 상세

그림 3은 그림 2의 3. 쿼리 결과패널입니다. SQL명령에 대한 단순 결과 출력 뿐만 아니라, 작업에 대한 메타정보와 SQL문 실행 세부정보를 확인할 수 있습니다. 그림 3의 경우 간단한 명령어로 데이터를 로드하고 출력하는 쿼리 실행 내용을 단계별로(Input, Output) 보여줍니다. 작업에 대한 리소스 사용량(시간, 슬롯, 셔플, 디스크)을 포함합니다. 실행 세부정보를 참조해서 SQL문을 최적화할 수 있습니다.

 

마무리

여기까지 BigQuery에 대한 소개 글을 마치겠습니다. 다음 포스팅에서는 GCP프로젝트와 BigQuery 실습환경을 만들고 ,GCP에서 제공하는 다양한 public dataset을 참조해서 간단한 데이터 분석 과정을 소개하도록 하겠습니다.

728x90