본문으로 바로가기

[GCP]빅쿼리 튜토리얼

category GCP (Google Cloud Platform)/ㄴBigQuery 2018. 2. 28. 13:37

빅쿼리란?


  1. 일종의 데이터 웨어하우스
    - 빅쿼리는 페타바이트급의 데이터 저장 및 분석용 클라우드 서비스이다. 
      쿼리를 통해서 조회나 통계 작업 등을 할 수 있는 DB라고 생각하면 된다.

  2. No/Ops
    - 설치나 운영이 따로 필요없다.
      어디에 설치해서 사용하는 서비스가 아니라 구글 클라우드 서비스를 통해서 제공되는 서비스이므로, 클릭 몇 번으로 사용이 가능하다.

  3. SQL 언어 사용
    - 기존의 RDBMS에서 사용하던 SQL 언어를 그대로 사용하기 때문에, 쉽다.

  4. 대용량 인프라
    - 클라우드 서비스이므로, 막강한 컴퓨팅 자원을 활용할 수 있다.

  5. 데이터 안정성
    - 빅쿼리 데이터는 3개의 복제본이 서로 다른 3개의 데이터 센터에 분산되어 저장되기 때문에 데이터에 대한 유실 위험이 적다.

  6. 배치, 스트리밍 모두 지원
    - 한꺼번에 데이터를 로딩하는 배치 이외에 REST API 등을 통해서 실시간 데이터를 입력할 수 있는 스트리밍 기능을 제공한다. (*Embulk, Fluent 등의 좋은 솔루션들도 연동이 잘 된다.)

  7. 저렴한 비용
    - (가격정책) https://cloud.google.com/bigquery/pricing
      데이터 저장 요금은 GB당 0.02$이고, 90일이 지나서 사용하지 않는 데이터는 자동으로 0.01$로 가격이 떨어진다. 트랜잭션 비용은 쿼리 수행 시 스캔되는 데이터를 기준으로 TB당 5$. (월 1TB는 무료)


빅쿼리 맛보기


  1. http://cloud.google.com 으로 들어가서 먼저 서비스에 가입을 한다. (가입하면 300$의 무료 크레딧이 주어진다. *365일 동안 사용가능.)

  2. 콘솔로 이동


  3. 프로젝트 생성
    - 상단에 표시된 부분 클릭 후, + 버튼을 눌러서 프로젝트 이름을 작성해준 뒤 생성한다.

  4. 좌측 메뉴 클릭
    - 좌측에 목록 메뉴 클릭


  5. 목록에서 빅쿼리 클릭
    - 가장 아래에 빅 데이터 란에 있다.


  6. 빅쿼리 콘솔로 이동, 데이터셋 생성
    - 화살표 클릭 후, Create new dataset 클릭 (여기서 데이터셋은 RDBMS의 DB라고 생각하면 된다.)


  7. 데이터 셋 생성 (내용)
    - ID는 이름이고, Location은 IDC의 위치이다. (현재는 US, EU밖에 없다.) Data expiration은 설정해주게 되면 설정한 날짜가 지난 후, 데이터가 삭제된다.

  8. 테이블 생성
    - 화살표 클릭 후(스크린샷에선 화살표가 안보이지만 마우스를 가져다 대면 보인다.) Create new table 클릭
  9. 테이블 생성 정보 입력
    - Create from source는 CSV파일 같은 기존에 존재하는 곳에서 데이터를 가져와서 그걸 기반으로 생성하는 것이다.
      Create empty table은 새로 생성하는 것이다.

    1. name 입력 - dataset.table_name으로 설정된다.
    2. Schema 입력 - 테이블의 스키마를 입력한다. Type과 Mode를 설정할 수 있다.
    3. Options 선택 - Partitioning은 빅쿼리의 특성상 조회시 무조건 풀스캔을 하기 때문에, 파티션(분할)관리가 가능하도록 넣은 기능이다.
        여기서 설정은 일 별로 할 수 있다. (옵션엔 없지만 월 별로도 가능하다. - 작성법에 따라)

  10. 테이블 생성 후 화면


  11. 쿼리 작성
    - 좌측 메뉴에 Compose Query 버튼을 누르면 쿼리작성이 가능한 란이 나온다.
      쿼리는 Legacy와 Standard 모두 사용이 가능하다. 
      Standard SQL 을 사용하려면 맨 첫 줄에 #standardSQL 이라고 선언해주어야 한다.
  12. 샘플 데이터 보기
    - 위키피디아 샘플 데이터를 한 번 조회해보겠다.
      좌측의 Public DataSets에서 samples → wikipedia로 이동한다. (약 3억건의 데이터가 있다.)


  13. 샘플쿼리를 작성한다.
    - title에 [Ss]eoul (S가 대,소문자 모두 포함된) 이 들어간 데이터를 찾는다.

    → 쿼리에 드는 용량이 얼마나 되는지 볼 수 있다. (extension을 붙이면 비용도 볼 수 있다.)

  14. 데이터 확인
    - 총 걸린 시간(2.3초!)과 조회한 데이터를 볼 수 있다.


빅쿼리 아키텍처


1. 빅쿼리는 컬럼기반 저장소이다.


다음과 같은 스키마가 있다고 가정해보자.


Schema

→ 전통 RDB에서는 다음과 같이 저장이 된다.

파일 1개에 한 row의 정보를 담고 있다.


그러나, 컬럼 기반에서는 다음과 같이 저장이 된다.

파일 1개에 한 Column의 정보를 담고 있다.


따라서, 분석용 데이터베이스(OLAP) 작업 등에 유리하다.

(ex. Last Name이 Kim인 사람이 몇 명인지 찾고 싶다. → 기존 RDB : 모든 데이터를 조회해야 한다.

                                                                                          컬럼 기반 : Last Name이 담긴 곳만 조회하면 된다.


2. 트리 기반 데이터 처리 구조

→ 빅쿼리 구조

맨 아래에 Colossus(분산 스토리지)라는 스토리지가 있고, Jupiter라는 네트워크 망(TB급)을 통해서 컴퓨팅 노드와 통신한다.

연산을 담당하는 컴퓨팅 계층은 Leaf, Mixer 1, Mixer 0 계층으로 되어 있다. 이 컴퓨팅 계층은 디스크 없이 Colossus에서 읽은 데이터를 처리해서

각각 위의 계층으로 올리는 역할을 한다.

  • 다른 구조적 특징 : No-Key, No-Index (무조건 풀 스캔!)


3. 데이터 구조


빅쿼리의 데이터 구조는 다음 그림과 같은 논리 구조를 갖는다. 일반적인 RDBMS와 크게 다르지 않다.


4. 데이터 타입


다음과 같은 일반적인 RDBMS의 데이터 타입도 있지만,


STRING : UTF-8 인코딩. 최대 2MB

INTEGER : 64비트

FLOAT :  부동소수점

BOOLEAN : 논리

TIMESTAMP : 시간


RECORD라는 특이한 데이터 타입도 있다.


다음의 Schema가 있다고 가정해보자.


Schema

→ 한 컬럼 속에 여러 컬럼이 들어갈 수 있다.



여기서 끝이 아니다.


Mode에 REPEATED라는 속성이 있다.


→ 한 row에 여러 값이 들어갈 수 있다.


빅쿼리의 강력한 장점


  1. 권한 관리와 데이터 공유

빅쿼리의 강력한 기능 중의 하나가 사용자 별로 데이터셋 또는 프로젝트에 대한 접근 권한을 관리할 수 있고, 데이터를 공유할 수 있는 기능이다.


원본 테이블 실행에 영향을 미치지 않고 공유된 테이블에 대해서 다른 사람들이 데이터 조회 연산을 수행할 수 있고,

데이터를 수정이나 가공하고자 할 경우에는 테이블을 몇 번의 클릭만으로 복사해서 원본 테이블에 영향 없이 복제된 테이블에서 작업을 할 수 있어서

사람간, 부서간 데이터 공유를 원활하게 할 수 있다.


권한의 종류에는 크게 프로젝트 권한과 데이터셋 권한이 있다.

(여기서는 이 이상 따로 정리하지 않겠다.)


       2. 다른 제품들과의 연동성


→ GCP의 다른 제품들과 잘 연동되어 데이터 분석을 쉽게 할 수 있다.


→ ML을 하는 데에도 쉽게 구성할 수 있다.


→ 특히나 파이어베이스와의 데이터 연동이 잘 된다.

이를 이용해 데이터 분석을 하는데에 더욱 집중할 수 있다.



Question.


  1. 처리 속도도 빠르고, 비용도 저렴한데 왜 RDB의 대체용으론 사용 못하나??
    → 보통 RDB와는 다른 Column기반의 저장형식이기 때문에, 비효율적. (ex. 데이터가 0건이라도 조회를 하면 1~2초가 걸린다. + 저장형태가 달라서 서비스용으로 부적합)


  2. 빅쿼리 데이터셋 location은 IDC region과 관계가 있나?
    → 위치를 뜻함.


  3. 생성이 왜 US, EU만 있나요?
    → 아직 이렇게 밖에 서비스를 안하는 것.


  4. 가격 정책?
    → https://developers.google.com/bigquery/docs/pricing?hl=ko (변경 가능성이 있기 때문에 링크로 대체)


  5. 활용법?
    → 데이터 분석에 이용하는게 가장 좋을 것. 다른 GCP 도구들과 연계가 잘 되어서 시각화도 좋고 관리도 쉽다. (ex. 챗봇 cs분석, datalab을 통한 line by line 시각화 등)


  6. Repeated 속성?
    → Repeated는 한 Row에 다중값이 들어갈 수 있음. 예를들어, schema가 (id, animal) 이렇게 있다고 가정했을 때, id가 1번인 사람의 animal이 (dog, cat, bird) 이렇게 다중값을 가질 수 있음.

참고자료 : 

1. 조대협의 블로그 - 구글 빅데이타 플랫폼 빅쿼리(Bigquery)소개 - http://bcho.tistory.com/1116

2. 빠르게 훑어보는 구글 클라우드 플랫폼 - 한빛미디어


'GCP (Google Cloud Platform) > ㄴBigQuery' 카테고리의 다른 글

[GCP] 빅쿼리(BigQuery) 소개  (0) 2017.10.23