Ch16 Data Types - Numeric types

Page content

I. 구글 클라우드 설정

본격적인 빅쿼리 실습에 앞서서, Python과 연동하는 예제를 준비하였다. 빅쿼리 시작에 앞서서 선행적으로 클라우드 사용을 해야 한다.

  1. 만약 GCP 프로젝트가 없다면, 계정을 연동한다. Go to Cloud Resource Manager
  2. 그리고, 비용결제를 위한 카드를 등록한다. Enable billing
  3. 마지막으로 BigQuery API를 사용해야 하기 때문에 빅쿼리 API 사용허가를 내준다.Enable BigQuery

위 API를 이용하지 않으면 Python 또는 R과 연동해서 사용할 수는 없다. 자주 쓰는것이 아니라면 비용은 거의 발생하지 않으니 염려하지 않아도 된다. 비용관리에 대한 자세한 내용은 BigQuery 권장사항: 비용 관리에서 확인하기를 바란다.

II. 사용자 계정 인증

구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail 인증 절차와 비슷하다.

from google.colab import auth
auth.authenticate_user()
print('Authenticated')
Authenticated

III. Data Types, Functions, and Operators

  • 다른 프로그래밍 언어와 마찬가지로 데이터 타입은 매우 기본적인 문법이며, 이를 숙지하는 것은 기본 문법 에러를 해결하는 데 있어서 매우 큰 도움이 된다.
  • BigQuery는 아래와 같이 다양한 데이터 유형을 지원한다. (numeric, string, time, geographic, structured, and semi-structured data)

(1) INT64

  • 빅쿼리에서 유일한 integer 데이터 유형이며, 데이터 유형의 범위는 $10^{-19}$~$10^{19}$ 사이의 값을 표현할 수 있다.
  • For real-valued numbers 값을 위해서는 FLOAT64, For Booleans, BOOL을 사용한다.

(2) Numeric

  • Numeric 데이터 유형은 소수점을 포함하여 모든 숫자의 개수가 38개 까지 표현 할 수 있고, 소수점은 9자리까지 표현할 수 있다.
  • 금융데이터와 같이 계산이 필요할 때 사용된다.

(3) String

  • 보통 우리가 아는 문자열을 의미한다. 원문에서는 BYTES와 비교를 하였는데, 우선 원문을 참고하기를 바란다.

This is a first-class type and represents variable-length sequences of Unicode characters. BYTES are variable-length sequence of characters (not Unicode)

(4) Timestamp

  • 시간상의 an absolute point in time을 의미한다.

(5) Datetime

  • 날짜와 시간을 의미하며, Date & Time을 구분해서 사용할 수 있다.

(6) Geography

  • 지도 데이터와 관련된, 지도상의 points, lines, and polygons를 표현할 수 있다.

(7) Struct and Array

IV. Numeric Types and Functions

  • 사칙연산을 수행할 때는 INT 64FLOAT 64 데이터타입으로 해야 한다.
  • 간단하게 코드를 작성해보자.
from google.cloud import bigquery
from tabulate import tabulate
import pandas as pd

project_id = 'your_project_id'
client = bigquery.Client(project=project_id)

temp = client.query('''
  WITH example AS (
    SELECT 'Sat' AS day, 1451 AS numrides, 1018 AS oneways
    UNION ALL SELECT 'Sun', 2376, 936
  )
  SELECT *, (oneways/numrides) AS frac_oneway
  FROM example
  ''').to_dataframe()

print(temp)
   day  numrides  oneways  frac_oneway
0  Sat      1451     1018     0.701585
1  Sun      2376      936     0.393939
  • (oneways/numrides)와 같이 연산 할 수 있음을 확인하였다.
  • bit 연산을 위한 <<, >>, &, |와 같은 연산도 지원한다.

V. Reference

Lakshmanan, V., & Tigani, J. (2020). Google BigQuery: the definitive guide: data warehousing, analytics, and machine learning at scale. Beijing: OReilly.