카테고리 없음

[GCP-9] BigQuery

솜정 2022. 1. 19. 09:00

0. 지난 글

[GCP-1] 구글 클라우드 기본 개념

https://ejtag.tistory.com/23

[GCP-2] 구글 클라우드 실습 준비

https://ejtag.tistory.com/24

[GCP-3] 구글 클라우드 IAM

https://ejtag.tistory.com/25

[GCP-4] Compute Engine

https://ejtag.tistory.com/26

[GCP-5] VPC

https://ejtag.tistory.com/27

[GCP-6] Cloud Load Balancing

https://ejtag.tistory.com/29

[GCP-7] Google Cloud Storage

https://ejtag.tistory.com/30

[GCP-8] Cloud SQL

https://ejtag.tistory.com/31

 

10. BigQuery

10.1 BigQuery란?

bigquery는 확장성이 뛰어난 구글의 기업용 서버리스 기반의 데이터 웨어하우스이다.

* 데이터 웨어하우스 : 축적된 데이터를 모아 관리하는 곳

대용량 Dataset(최대 몇 십억 개의 행)를 대화식으로 분석할 수 있는 웹 서비스이다.

표준 SQL을 지원한다.

ODBC, JDBC 드라이버 제공 -> 데이터를 쉽고 빠르게 통합할 수 있다.

초고속 SQL 쿼리 실행 가능하다.

스토리지와 컴퓨팅이 분리되어 있어 데이터 웨어하우스 용량 확장성이 좋다.

내부적으로 관리형 열 형식 스토리지, 대량 동시 실행, 자동 성능 최적화 기능을 제공한다.

google cloud storage, 구글시트, 구글 드라이브 등으로 손쉽게 데이터 읽을 수 있다.

인포매티카, 탈랜드 같은 기존 ETL 도구와 연동 지원한다.

* ETL 도구 : Extract, Transform, Load의 약자로 데이터 추출, 변환, 적재하는 도구를 말한다.

모든 배치와 스트리밍 데이터를 분석할 수 있고, 수집한 데이터를 실시간으로 캡처하고 분석해 통계를 항상 최신으로 유지한다.

BigQuery ML을 이용하면 SQL 쿼리를 통해 ML 모델을 학습시키는 것이 가능하며, 클라우드 ML엔진과 텐서플로와도 통합이 가능하다.

 

10.2 BIgQuery 구조

projext > dataset > table

- project : 가장 큰 개념으로, 결제 및 승인된 사용자에 대한 정보가 저장되며 각 프로젝트에는 이름과 고유 ID가 있다.

- dataset : RDB의 database와 같은 개념으로, dataset은 특정 프로젝트에 포함되며, 데이블과 뷰에 대한 액세스를 구성하고 제어하는 데 사용한다.

- table : 행으로 구성된 개별 레코드가 포함된다. 각 레코드는 칼럼으로 구성되며, 모든 테이블은 칼럼명, 데이터 유형, 기타 정보를 설명하는 스키마로 정의된다.

  - 기본 테이블 : BigQuery Repository에서 지원되는 테이블

  - 외부 테이블 :BigQuery 외부 Repository에서 지원되는 테이블

  - 뷰 : SQL 쿼리로 정의된 가상 테이블

- job : 쿼리, 데이터 로딩, 생성, 삭제 등 작업에 대한 단위

 

10.3 BigQuery SQL

BigQuery SQL 종류

- standard SQL

- legacy SQL

 

10.3.1 standart SQL VS legacy SQL

Standard SQL legacy SQL
'프로젝트명, 데이터세트, 테이블명'
EX) select * from 'my-project.my-dataset.my-table'
[프로젝트명:데이터세트,테이블명]
EX) select * from [my-project:my-dataset,my-table]
'with'절 사용 가능  
DML(insert, update, delete)사용 가능  
Array 및 Struct 데이터 타입 사용 가능  
더 엄격한 Timestmp 값 범위  
모든 위치에서 Sub Query 지원  

 10.3.2 표준 SQL 데이터 타입

참고 : https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types

 

데이터 유형  |  BigQuery  |  Google Cloud

의견 보내기 데이터 유형 이 페이지에서는 값 도메인에 대한 정보를 포함하여 모든 Google 표준 SQL 데이터 유형을 간략히 설명합니다. 데이터 유형 리터럴 및 생성자에 대한 자세한 내용은 어휘

cloud.google.com

10.3.3 표준 SQL 쿼리

참고 : https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax

 

쿼리 구문  |  BigQuery  |  Google Cloud

의견 보내기 쿼리 구문 쿼리 문은 테이블 또는 표현식을 한 개 이상 검색하고 계산된 결과 행을 반환합니다. 여기서는 BigQuery의 SQL 쿼리에 관한 구문을 설명합니다. SQL 구문 query_statement: query_expr

cloud.google.com

* SubQuery : 쿼리 안에 또 다른 쿼리를 넣을 수 있는 기능

ex) SELECT TEMP.* FROM ( SELECT * FROM 'my-project.my_dataset.product') AS TEMP

* CROOS JOIN : 공통 필드가 없을 때 두 테이블을 합치는 기능

ex) SELECT * FROM 'my-project.my_dataset.product' CROSS JOIN 'my-project.my_dataset.access_log'

* INNER JOIN : On 또는 USING에서 지정한 칼럼을 기준으로 테이블을 합치며, 양쪽 모두 이쓴ㄴ 컬럼을 기준으로 데이터를 합치는 기능

* LEFT JOIN : USING에서 지정한 컬럼을 기준으로 테이블을 합친다. 왼쪽에 지정한 테이블을 기준으로 오른쪽에 데이터가 없으면 오른쪽에 지정한 테이블에 null을 넣는다.

* FULL JOIN : USING에서 지정한 컬럼을 기준으로 테이블을 합친다. 합치는 테이블의 매칭 되는 데이터가 없으면 양쪽 다 null을 넣는다.

 

10.3.4 표준 SQL 함수

참고 : https://cloud.google.com/bigquery/docs/reference/standard-sql/syntax

 

10.4 BigQuery ML

BigQuery ML을 사용하면, BigQuery에서 Python이나 자바와 같은 프로그래밍 언어 없이 표준 SQL 쿼리만으로 머신 러닝 모델을 만들고 실행할 수 있다.

다음 모델을 지원한다.

- 선형 회귀 : 숫자 값을 예측

- 이진 롤지 스틱 회귀 : 두 클래스 중 하나를 예측하는 데 사용

- 다중 클래스 로지스틱 회귀 : 3개 이상의 클래스를 예측하는 데 사용

장점

- python이나 자바와 같은 프로그래밍 언어를 사용하지 않고, sql을 사용해 모델 만들고 실행할 수 있다.

- 데이터 웨어하우스 내에서 모델을 만들고 실행하기 때문에 데이터를 내보내지 않아도 되어 속도가 빠르다.

 

10.5 BigQuery GIS

지리 데이터 유형과 표준 SQL 지리 함수를 사용하여 BIgQuery에서 지리공간 데이터를 분석화, 시각화할 수 있다.

제약사항

- 지리 함수는 표준 SQL에서만 지원한다.

- BigQuery Client library는 아직까지는 지오그래피 데이터 유형을 지원하지 않는다.

- DML문은 GEOGRAPHY 데이터 유형을 지원하지 않는다.

 

[실습 10.1 - 데이터 세트 및 테이블 생성 및 삭제]

메뉴 > BigQuery > 프로젝트명 > 데이터 세트 만들기 접근한다.
위와같이 설정후 데이터세트 만들기 버튼 클릭함
테이블 만들기 메뉴 클릭한다.
편집기에서 쿼리 입력 후 실행 누른다.

실행 명령어 :

INSERT INTO `gcloud-byej.my_first_dataset.my_first_table` (email, name, age) VALUES ("test@gmail.com""tester"32);
쿼리 결과가 테이블에 반영된 것을 확인할 수 있다.

테이블을 삭제해 보자

 

* 실습 도중 아래와 같은 에러가 날 때가 있다.

그럴 땐 L옆 옆에 있는 ' 문자가 아니라 Esc아래 있는 ` 이 문자를 이용해서 쿼리를 작성해 보면 해결된다.

[실습 10.2 - CSV로 테이블 만들기]

csv 파일 샘플을 아래 링크에서 받는다.

https://eforexcel.com/wp/downloads-16-sample-csv-files-data-sets-for-testing/

 

Downloads 16 - Sample CSV Files / Data Sets for Testing - Human Resources (5 million records) - E for Excel

Disclaimer – The datasets are generated through random logic in VBA. These are not real human resource data and should not be used for any other purpose other than testing. Other data sets – Sales   Credit Card    Bank Transactions   HR Analytics

eforexcel.com

csv 파일이 잘 업로드된다.

[실습 10.3 - 간단한 SQl 및 시각화와 저장]

BigQuery에서 제공하는 공개 데이터를 이용하여 간단한 SQL 작성을 통한 결과로 이를 시작화 및 저장을 해보겠다.

먼저 공개 데이터를 가져와보자

 

이제 범죄별 카운트를 구해보겠다.

실행 명령어 :

SELECT primary_type AS TYPE, count(primary_type) AS TOTAL_RATE
FROM `bigquery-public-data.austin_crime.crime` 
GROUP BY TYPE
데이터 스튜디오로 탐색 클릭한다.
승인을 누르면 쿼리 결과가 긁어져 왔다.
오른쪽 차트 종류에 따라 값이 시각화 된다.
 쿼리 결과를 저장해보자.

결과 저장 버튼을 눌러 csv타입으로 로컬에 저장하였다.