빅쿼리란?
- 일종의 데이터 웨어하우스
- 빅쿼리는 페타바이트급의 데이터 저장 및 분석용 클라우드 서비스이다.
쿼리를 통해서 조회나 통계 작업 등을 할 수 있는 DB라고 생각하면 된다. - No/Ops
- 설치나 운영이 따로 필요없다.
어디에 설치해서 사용하는 서비스가 아니라 구글 클라우드 서비스를 통해서 제공되는 서비스이므로, 클릭 몇 번으로 사용이 가능하다. - SQL 언어 사용
- 기존의 RDBMS에서 사용하던 SQL 언어를 그대로 사용하기 때문에, 쉽다. - 대용량 인프라
- 클라우드 서비스이므로, 막강한 컴퓨팅 자원을 활용할 수 있다. - 데이터 안정성
- 빅쿼리 데이터는 3개의 복제본이 서로 다른 3개의 데이터 센터에 분산되어 저장되기 때문에 데이터에 대한 유실 위험이 적다. - 배치, 스트리밍 모두 지원
- 한꺼번에 데이터를 로딩하는 배치 이외에 REST API 등을 통해서 실시간 데이터를 입력할 수 있는 스트리밍 기능을 제공한다. (*Embulk, Fluent 등의 좋은 솔루션들도 연동이 잘 된다.) - 저렴한 비용
- (가격정책) https://cloud.google.com/bigquery/pricing
데이터 저장 요금은 GB당 0.02$이고, 90일이 지나서 사용하지 않는 데이터는 자동으로 0.01$로 가격이 떨어진다. 트랜잭션 비용은 쿼리 수행 시 스캔되는 데이터를 기준으로 TB당 5$. (월 1TB는 무료)
빅쿼리 맛보기
- http://cloud.google.com 으로 들어가서 먼저 서비스에 가입을 한다. (가입하면 300$의 무료 크레딧이 주어진다. *365일 동안 사용가능.)
- 콘솔로 이동
- 프로젝트 생성
- 상단에 표시된 부분 클릭 후, + 버튼을 눌러서 프로젝트 이름을 작성해준 뒤 생성한다. - 좌측 메뉴 클릭
- 좌측에 목록 메뉴 클릭 - 목록에서 빅쿼리 클릭
- 가장 아래에 빅 데이터 란에 있다. - 빅쿼리 콘솔로 이동, 데이터셋 생성
- 화살표 클릭 후, Create new dataset 클릭 (여기서 데이터셋은 RDBMS의 DB라고 생각하면 된다.) - 데이터 셋 생성 (내용)
- ID는 이름이고, Location은 IDC의 위치이다. (현재는 US, EU밖에 없다.) Data expiration은 설정해주게 되면 설정한 날짜가 지난 후, 데이터가 삭제된다. - 테이블 생성
- 화살표 클릭 후(스크린샷에선 화살표가 안보이지만 마우스를 가져다 대면 보인다.) Create new table 클릭 - 테이블 생성 정보 입력
- Create from source는 CSV파일 같은 기존에 존재하는 곳에서 데이터를 가져와서 그걸 기반으로 생성하는 것이다.
Create empty table은 새로 생성하는 것이다.1. name 입력 - dataset.table_name으로 설정된다.
2. Schema 입력 - 테이블의 스키마를 입력한다. Type과 Mode를 설정할 수 있다.
3. Options 선택 - Partitioning은 빅쿼리의 특성상 조회시 무조건 풀스캔을 하기 때문에, 파티션(분할)관리가 가능하도록 넣은 기능이다.
여기서 설정은 일 별로 할 수 있다. (옵션엔 없지만 월 별로도 가능하다. - 작성법에 따라) - 테이블 생성 후 화면
- 쿼리 작성
- 좌측 메뉴에 Compose Query 버튼을 누르면 쿼리작성이 가능한 란이 나온다.
쿼리는 Legacy와 Standard 모두 사용이 가능하다.
Standard SQL 을 사용하려면 맨 첫 줄에 #standardSQL 이라고 선언해주어야 한다. - 샘플 데이터 보기
- 위키피디아 샘플 데이터를 한 번 조회해보겠다.
좌측의 Public DataSets에서 samples → wikipedia로 이동한다. (약 3억건의 데이터가 있다.) - 샘플쿼리를 작성한다.
- title에 [Ss]eoul (S가 대,소문자 모두 포함된) 이 들어간 데이터를 찾는다.
→ 쿼리에 드는 용량이 얼마나 되는지 볼 수 있다. (extension을 붙이면 비용도 볼 수 있다.) - 데이터 확인
- 총 걸린 시간(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에 여러 값이 들어갈 수 있다.
빅쿼리의 강력한 장점
권한 관리와 데이터 공유
빅쿼리의 강력한 기능 중의 하나가 사용자 별로 데이터셋 또는 프로젝트에 대한 접근 권한을 관리할 수 있고, 데이터를 공유할 수 있는 기능이다.
원본 테이블 실행에 영향을 미치지 않고 공유된 테이블에 대해서 다른 사람들이 데이터 조회 연산을 수행할 수 있고,
데이터를 수정이나 가공하고자 할 경우에는 테이블을 몇 번의 클릭만으로 복사해서 원본 테이블에 영향 없이 복제된 테이블에서 작업을 할 수 있어서
사람간, 부서간 데이터 공유를 원활하게 할 수 있다.
권한의 종류에는 크게 프로젝트 권한과 데이터셋 권한이 있다.
(여기서는 이 이상 따로 정리하지 않겠다.)
2. 다른 제품들과의 연동성
→ GCP의 다른 제품들과 잘 연동되어 데이터 분석을 쉽게 할 수 있다.
→ ML을 하는 데에도 쉽게 구성할 수 있다.
→ 특히나 파이어베이스와의 데이터 연동이 잘 된다.
이를 이용해 데이터 분석을 하는데에 더욱 집중할 수 있다.
Question.
- 처리 속도도 빠르고, 비용도 저렴한데 왜 RDB의 대체용으론 사용 못하나??
→ 보통 RDB와는 다른 Column기반의 저장형식이기 때문에, 비효율적. (ex. 데이터가 0건이라도 조회를 하면 1~2초가 걸린다. + 저장형태가 달라서 서비스용으로 부적합) - 빅쿼리 데이터셋 location은 IDC region과 관계가 있나?
→ 위치를 뜻함. - 생성이 왜 US, EU만 있나요?
→ 아직 이렇게 밖에 서비스를 안하는 것. - 가격 정책?
→ https://developers.google.com/bigquery/docs/pricing?hl=ko (변경 가능성이 있기 때문에 링크로 대체) - 활용법?
→ 데이터 분석에 이용하는게 가장 좋을 것. 다른 GCP 도구들과 연계가 잘 되어서 시각화도 좋고 관리도 쉽다. (ex. 챗봇 cs분석, datalab을 통한 line by line 시각화 등) - 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 |
---|