1.1. BigQuery 개요1.1.1. BigQuery 소개1.1.2. 데이터베이스 기본 용어1.1.3. BigQuery 특징1.2. BigQuery 테이블1.2.1. 스키마1.2.2. DATA TYPE1.3. BigQuery 프로젝트 생성1.4. BigQuery에 데이터 불러오기1.4.1. BigQuery가 지원하는 테이블 유형1.4.2. BigQuery 공개 데이터셋 불러오기1.4.3. Analytics Hub 데이터 불러오기1.4.4. 실습 환경 설정하기1.5. 부록1.5.1. BigQuery 가격 책정1.5.2. BigQuery 스토리지
1.1. BigQuery 개요
1.1.1. BigQuery 소개
BigQuery는 Google Cloud Platform의 클라우드 기반 데이터 웨어하우징 서비스로, 대규모 데이터셋을 저장, 쿼리하고 분석하는 데 사용되는 완전 관리형 서버리스 SQL 데이터베이스입니다.
SQL 기반의 쿼리 언어를 사용하여 데이터를 쉽게 검색 및 분석할 수 있으며, 데이터 분석가, 데이터 엔지니어 등 다양한 사용자들이 중요한 비즈니스 의사결정을 내릴 수 있도록 합니다.
1.1.2. 데이터베이스 기본 용어
- Key: 데이터베이스에서 데이터를 식별하거나 조회하는데 활용되는 고유한 식별자입니다.
- 타입: 각 열이 가질 수 있는 데이터 유형을 나타냅니다. 문자열, 숫자, 날짜 등이 있습니다.
- Date: 날짜 데이터를 저장하고 조작하기 위한 데이터 유형을 나타냅니다. 시간, 연도, 월, 일 등의 정보를 포함할 수 있습니다.
- RDBMS (Relational Database Management System): 관계형 데이터베이스 관리 시스템으로, 서로 관련된 각 테이블의 관계를 통해 데이터를 조직, 관리하고 쿼리할 수 있습니다.
- ERD (Entity-Relationship Diagram): 엔터티 간의 관계를 시각적으로 표현한 다이어그램으로, 데이터베이스 설계와 구조를 이해하고 표현하기 위해 사용됩니다.
1.1.3. BigQuery 특징
BigQuery의 주요한 특징은 다음과 같습니다. 그 외의 특징에 대한 정보는 아래 서술한 내용 혹은 공식 문서를 참고해 주십시오.
- 서버리스 아키텍처
- 서버 관리나 설정에 상관 없이 사용할 수 있는 서버리스 아키텍처를 제공합니다.
- 사용자는 데이터 처리에 집중하고 복잡한 서버 관리를 할 필요가 없습니다.
- 데이터 공유 및 협업 기능
- 실시간으로 다수의 사용자와 데이터를 공유할 수 있어, 효율적으로 팀 간 데이터 공유 및 데이터 분석 협업 환경을 구축할 수 있습니다.
- 저장된 프로시저
- 저장된 프로시저를 사용하여 데이터베이스에서 실행되는 SQL 코드 블록을 정의하고 실행할 수 있는 기능을 제공합니다.
- 이를 통해 복잡한 쿼리나 프로세스를 단순화하고 재사용성을 높일 수 있습니다.
- 데이터 보안 및 액세스 제어
- Google Cloud Platform(GCP)의 Identity and Access Management(IAM)을 중심으로 구성됩니다. IAM을 통해 프로젝트, 데이터셋, 테이블 등의 액세스 권한을 관리하고, 열 수준 액세스 제어를 통해 특정 열에 대한 접근을 제어합니다.
- 데이터는 암호화되어 저장되며, 감사 로깅 및 다양한 접근 제어 기능을 활용하여 데이터 접근과 변경 내역을 관리할 수 있습니다. 이를 통해 데이터의 보안과 안전한 액세스를 보장합니다.
1.2. BigQuery 테이블
테이블은 데이터를 구조화된 형태로 저장하는 데이터베이스의 핵심 단위로, 행과 열로 이루어진 형태로 데이터가 저장됩니다.
1.2.1. 스키마
스키마는 데이터베이스에서 테이블의 구조를 정의하는 데 사용되며, 각 열의 이름, 데이터 유형, 설명, 제약 조건, 기본값 등을 포함합니다. BigQuery를 사용하면 데이터를 테이블에 로드하거나 새로운 빈 테이블을 만들 때 해당 테이블의 스키마를 지정할 수 있습니다.
스키마 지정
- 열 이름
- 문자(a~z, A~Z) 포함 가능
- 숫자(0~9) 포함 가능
- 밑줄(_) 포함 가능
- 문자 또는 밑줄로 시작해야 함
- 열 이름의 최대 길이는 300자임(영문 기준)
- 대소문자가 다른 중복 열 이름은 허용되지 않음
열 이름을 지정하는 조건은 다음과 같습니다.
- 열 설명
각 열에는 최대 1,024자의 문자열의 설명이 포함될 수 있습니다.
- 기본값
- 리터럴
- 특정 함수들
CURRENT_DATE
: 현재 날짜를 나타내는 함수CURRENT_DATETIME
: 현재 날짜와 시간을 나타내는 함수CURRENT_TIME
: 현재 시간을 나타내는 함수CURRENT_TIMESTAMP
: 현재 타임스탬프(날짜 및 시간)를 나타내는 함수GENERATE_UUID
: UUID(Universally Unique Identifier)를 생성하는 함수RAND
: 0에서 1 사이의 무작위 부동 소수점 숫자를 생성하는 함수SESSION_USER
: 현재 세션의 사용자를 나타내는 함수ST_GEOGPOINT
: 지리적인 점을 나타내는 함수
열의 기본값은 리터럴 또는 특정 함수 중 하나여야 합니다.
열의 기본값으로 직접 값을 지정합니다. 예를 들어, 기본값으로 문자열, 숫자, 날짜 등을 직접 입력할 수 있습니다.
- 모드
BigQuery는 다음과 같은 열 모드를 지원합니다. 모드는 선택사항이며, 모드를 지정하지 않을 경우, 열은 기본적으로 NULLABLE로 설정됩니다.
모드 | 설명 |
NULLABLE | 열에서 NULL 값 허용(기본값) |
REQUIRED | NULL 값이 허용되지 않음 |
REPEATED | 열에 지정된 유형의 값 배열 포함 |
중첩 및 반복 열 지정
BigQuery는 데이터가 비정규화된 상태일 때 성능이 가장 뛰어납니다. 따라서, 중첩 및 반복 열 등을 활용하여 데이터를 비정규화하고, 관계형 스키마를 유지하지 않는 것이 효율적일 수 있습니다. 중첩 및 반복 열을 사용하면 데이터 간의 관계를 덜 복잡하게 유지하면서도 데이터를 더 효율적으로 저장하고 검색할 수 있습니다.
- 중첩 열
- 중첩 데이터를 가진 열을 생성하려면 스키마에서 해당 열의 데이터 유형을
RECORD
로 지정합니다.RECORD
는 표준 SQL에서STRUCT
유형으로 접근할 수 있는 형식입니다.
- 반복 열
- 반복 데이터를 가진 열을 생성하려면 스키마에서 해당 열의 모드를 REPEATED로 설정합니다. REPEATED는 표준 SQL에서
ARRAY
유형으로 접근할 수 있는 형식입니다.
BigQuery가 지원하는 중첩 및 반복 열에 대한 자세한 내용은 공식 문서를 참고해 주시기 바랍니다.
스키마 자동 감지
스키마 자동 감지는 사용자가 스키마를 수동으로 지정할 필요 없이 자동으로 데이터 유형을 추론하는 BigQuery의 기능입니다. 주로 데이터를 로드할 때 혹은 외부의 데이터를 쿼리할 때 사용됩니다.
CSV
, JSON
및 Google Sheets
와 같은 데이터 형식의 스키마를 자동으로 추론할 수 있습니다.자동 감지를 사용하면 BigQuery는 데이터 소스의 일부를 샘플링하여 열의 데이터 유형을 추론합니다. 대표적인 샘플로 사용하기 위해 최대 500행의 데이터를 스캔하며, 각 필드의 데이터 유형을 샘플값에 기반하여 할당합니다.
- CSV 데이터
CSV
구분 기호:CSV
구분 기호 중 쉼표(,) / 파이프(|) / 탭(\t)을 자동으로 감지합니다.CSV
헤더: 첫 번째 행을 분석하여 열 이름을 추론합니다. 이 행이 문자열만을 포함하고 다른 행과 데이터 유형이 다를 경우, BigQuery는 첫 번째 행을 헤더로 간주하고 해당 필드를 열 이름으로 할당합니다. 만약 첫 번째 행이 헤더로 인식되지 않으면 일반적인 열 이름(예: string_field_1)을 사용하여 데이터를 로드합니다.
- JSON 데이터
JSON
중첩 및 반복 필드:JSON
객체인 경우 해당 필드를RECORD
유형으로 열을 생성하고, 배열인 경우에는 반복 열로 열을 생성합니다.- 문자열 변환: 가능한 경우 문자열을 숫자,
BOOLEAN
또는 날짜/시간 유형으로 변환합니다. 예를 들어, “id” 필드가 “1234”와 같이 정수로 표현된 경우, “id” 필드를INTEGER
유형으로 자동 변환합니다.
1.2.2. DATA TYPE
데이터 타입은 데이터 베이스에서 저장되는 값의 종류 또는 형식을 정의하는 중요한 개념입니다. Google BigQuery에서는 다양한 데이터 타입을 지원합니다. 아래에서는 BigQuery에서 주로 사용되는 데이터 타입들을 설명하겠습니다.
- STRING
STRING
형식은 문자열 데이터를 나타내는 데이터 형식입니다. 텍스트, 문자열, 레이블, 이름 등의 정보를 저장할 때 사용됩니다. 

- INTEGER
INTEGER
형식은 정수 데이터를 나타내는 데이터 형식으로, 소수점 이하의 숫자를 포함하지 않습니다. 정수 값의 연산 및 저장에 사용됩니다.

- FLOAT
FLOAT
형식은 부동 소수점 숫자를 나타내는 데이터 형식입니다. 소수점 이하의 숫자를 저장할 때 사용되며, 실수 값의 연산에 적합합니다.

- BOOLEAN
BOOLEAN
형식은 TRUE
또는 FALSE
을 나타내는 데이터 형식입니다. 논리적인 조건을 표현할 때 사용됩니다. - DATE
DATE
형식은 오직 날짜 정보만을 저장합니다. 연, 월, 일 정보만을 포함하고 시, 분, 초 정보는 포함하지 않습니다. DATE
형식은 주로 날짜에 기반한 필터링 및 집계 작업에 사용됩니다. 예를 들어, 날짜 범위 내의 데이터를 추출하거나 일별 판매량을 계산하는 데 활용됩니다.DATE
DATE
형식은 “YYYY-MM-DD”로 표현됩니다. 여기서 “YYYY”는 연도, “MM”은 월, “DD”는 일을 나타냅니다.
- 예를 들어, “2023-01-01”은 2023년 1월 1일을 나타냅니다.
- TIME
TIME
형식은 오직 시간 정보만을 저장합니다. 시, 분, 초 및 마이크로초(microseconds)까지의 정보를 포함합니다. TIME
형식은 주로 시간에 기반한 연산에 사용됩니다. 예를 들어, 특정 시간 간격 동안의 활동을 분석하는 데 활용됩니다.TIME
TIME
형식은 “HH:MM:SS.ssssss”로 표현됩니다. 여기서 “HH”는 시간, “MM”은 분, “SS”는 초, “ssssss”는 마이크로초를 나타냅니다.
- 예를 들어, '15:30:00.123456'은 오후 3시 30분 0.123456초를 나타냅니다.
- DATETIME
DATETIME
형식은 날짜와 시간 정보 모두 저장합니다. 연, 월, 일, 시, 분, 초, 마이크로초까지의 정보를 포함합니다. DATETIME
형식은 일반적으로 이벤트 시간을 기록하거나 이벤트 간의 시간 차이를 계산하는 데 사용합니다.DATETIME
DATETIME
형식은 “YYYY-MM-DD HH:MM:SS.ssssss”로 표현됩니다. 여기서 “YYYY”는 연도, “MM”은 월, “DD”는 일, “HH”는 시간, “MM”은 분, “SS”는 초, “ssssss”는 마이크로초를 나타냅니다.
- 예를 들어, “2023-01-01 15:30:00.123456”은 2023년 1월 1일 오후 3시 30분 0.123456초를 나타냅니다.
- TIMESTAMP
TIMESTAMP
형식은 DATETIME
타입과 유사하지만 UTC(세계 표준 시간) 시간대를 사용하여 날짜와 시간 정보를 저장합니다. 이 형식은 분산 시스템에서 데이터 일관성을 유지하고 데이터의 정확한 타임스탬프 정보를 저장하는 데 사용됩니다.TIMESTAMP
TIMESTAMP
형식은 'YYYY-MM-DD HH:MM:SS.ssssss UTC' 또는 'YYYY-MM-DD HH:MM:SS.ssssss'로 표현됩니다. UTC 시간대를 명시적으로 나타내거나 생략할 수 있습니다.
- '2023-01-01 15:30:00.123456 UTC' 또는 ‘2023-01-01 15:30:00.123456’
- ARRAY
ARRAY
형식은 여러 값을 나타내는 데이터 형식으로, 동일한 데이터 타입의 값들을 리스트 형태로 저장합니다. 예를 들어, 문자열 배열 또는 정수 배열을 저장할 수 있습니다.
- STRUCT
STRUCT
형식은 데이터 열 내에서 구조화된 정보를 저장하는 데이터 형식입니다. 이 데이터 형식은 복잡한 정보를 하나의 열 내에 저장하고 조직화할 수 있으며, 주로 배열과 함께 사용됩니다. STRUCT
형식을 사용하면 중첩 필드를 생성할 수 있으며, 이는 구조화된 데이터를 효율적으로 다루는 데 도움이 됩니다. 중첩 필드를 사용하면 데이터의 특정 측면을 보다 세부적으로 표현할 수 있으며, 이를 통해 복잡한 데이터 구조를 다루기 쉬워집니다. 예를 들어, “주소”라는 중첩필드를 사용하면 해당 필드 내에 “도시”, “우편번호”와 같은 하위 필드를 중첩할 수 있습니다.
이렇게 중첩 필드를 활용하면 구조화된 데이터를 효과적으로 저장하고 검색할 수 있으며, 이는 데이터베이스 및 스키마 설계에서 특히 유용하며, 데이터의 구조를 보다 명확하게 정의하고 관리할 수 있습니다. 조금 더 자세한 내용은 공식문서를 참고 바랍니다.
STRUCT vs. JSON
BigQuery의
STRUCT
형식과 JSON
은 모두 계층적인 데이터 구조를 표현하는 데 사용되지만, 기본적으로는 다른 것입니다. 다만, 몇 가지 유사점이 있습니다.- BigQuery의 STRUCT:
STRUCT
형식은 BigQuery의 복합 데이터 유형 중 하나로, 여러 필드를 하나의 엔터티로 그룹화하는 데 사용됩니다.- 각 필드는 이름과 데이터 유형을 가질 수 있습니다.
- 예:
STRUCT<name STRING, age INT64>
- JSON (JavaScript Object Notation):
JSON
은 경량 데이터 교환 형식으로, 사람이 읽고 쓰기 쉽고 기계가 파싱하고 생성하기 쉽습니다.JSON
은 키-값 쌍으로 구성된 객체와 값의 배열로 구성될 수 있습니다.- 예:
{"name": "John", "age": 30}
STRUCT
형식과 JSON
이 구조적으로 유사해 보일 수 있지만, 서로 다른 문법과 목적을 가지고 있습니다. 그러나 BigQuery는 JSON
데이터를 쿼리하고, JSON
형식의 데이터를 STRUCT
나 다른 복합 데이터 유형으로 변환하는 기능을 제공합니다.
- GEOGRAPHY
지리 정보를 나타내는 데이터 형식으로, 지리적 좌표 또는 지도 데이터를 저장할 때 사용됩니다. 공간 데이터베이스와 지리 정보 시스템(GIS)과 관련이 있습니다.
- BYTES
이진 데이터를 나타내는 데이터 형식으로, 이미지, 오디오, 비디오 및 기타 이진 형식의 데이터를 저장할 때 사용됩니다.
1.3. BigQuery 프로젝트 생성
프로젝트는 데이터 및 관련 리소스를 구성하고 관리하는 단위입니다. Google Cloud Platform(GCP)에서 데이터 분석 및 처리를 위한 공통 환경을 제공하며, 데이터베이스, 테이블, 쿼리 작업 등을 포함하는 다양한 데이터 관련 리소스를 포함할 수 있습니다.
샌드박스는 BigQuery에서 제공하는 무료 프로젝트입니다. 최초 프로젝트 생성 시, $300의 무료 크레딧이 제공되며, 소진 시 사용량에 따른 비용이 부과됩니다.
- 구글 클라우드에 접속 후 콘솔(Console) 버튼을 클릭하여 접속합니다.

- 프로젝트 선택 메뉴를 클릭하여 새 프로젝트를 생성합니다.


- 좌측 상단 메뉴를 선택에 BigQuery SQL 작업 공간에 접속하고, 생성한 프로젝트를 선택합니다.


1.4. BigQuery에 데이터 불러오기
1.4.1. BigQuery가 지원하는 테이블 유형
- 표준 BigQuery 테이블
- 스키마가 있고 스키마의 모든 열에 테이터 유형이 있는 기본 테이블
- 테이블 클론: BigQuery 테이블의 쓰기 가능한 경량 사본(클론과 기본 테이블 간의 델타만 저장)
- 테이블 스냅샷: 테이블의 특정 시점 사본 (읽기 전용이지만 테이블을 복원할 수 있음, 스냅샷과 기본 테이블 간에 차이가 있는 바이트만 저장)
표준 BigQuery 테이블에는 구조화된 데이터가 포함되어 있으며 BigQuery 스토리지에 열 형식으로 저장됩니다.
- 외부 테이블
- BigLake 테이블: Cloud Storage, Amazon Simple Storage Service(Amazon S3), Azure Blob Storage 등의 데이터 저장소에 저장된 구조화된 데이터를 참조하는 테이블
- 객체 테이블: Cloud Storage와 같은 데이터 저장소에 저장된 JSON 파일, CSV 파일, Avro 파일 등과 같은 다양한 형식의 구조화되지 않은 데이터를 참조하는 테이블 (객체 테이블은 JSON과 같은 스키마리스 형식으로 저장되는 데이터를 불러와서 쿼리할 수 있기 때문에 다양한 형태의 비정형적인 데이터를 효과적으로 다룰 수 있습니다.)
- BigLake가 아닌 외부 테이블: Cloud Storage, Google Drive, Cloud Bigtable 등의 데이터 저장소에 저장된 구조화된 데이터를 참조
외부 테이블은 BigQuery 스토리지 외부에 저장되며 BigQuery 외부에 저장된 데이터를 참조합니다.
BigQuery가 지원하는 테이블 유형에 대한 자세한 내용은 공식 문서를 참고해 주시기 바랍니다.
1.4.2. BigQuery 공개 데이터셋 불러오기
BigQuery의 공개 데이터셋은 Google Cloud에서 제공하는 데이터셋으로, 무료로 사용할 수 있습니다.
- 탐색기의 “+추가” 버튼 클릭 후, 공개 데이터셋을 선택합니다.


- 데이터를 검색하거나, 필터를 설정하여 원하는 데이터를 선택합니다.


- 데이터셋 내 테이블의 스키마와 미리 보기 등 정보를 확인할 수 있으며, 쿼리를 통한 작업이 가능합니다.

1.4.3. Analytics Hub 데이터 불러오기
Analytics Hub는 데이터 교환 플랫폼으로, 강력한 보안 및 개인 정보 보호 프레임워크를 갖추고 있어 조직 경계를 넘어 데이터 및 통계를 규모에 맞게 공유할 수 있습니다. 또한 Analytics Hub를 통해 다양한 데이터 제공 업체가 선별한 데이터 라이브러리에 쉽게 액세스할 수 있습니다. Google이 제공하는 다양한 데이터셋도 이 라이브러리에 포함되어 있습니다.
- 왼쪽 메뉴에서 Analytics Hub를 선택합니다.

- Analytics Hub API “사용” 버튼을 클릭합니다.

- SQL 작업 공간에 접속하고, 탐색기의 “+추가” 버튼을 클릭하여 “Analytics Hub”를 선택합니다.



- 데이터를 검색하거나, 필터를 선택하여 원하는 데이터를 선택합니다. Analytics Hub에 공개된 데이터를 사용하기 위해서는 데이터 저작권자에게 액세스 권한을 요청해야 합니다.

Analytics Hub API를 통해 데이터를 등록 및 교환하는 자세한 방법은 공식 문서를 참고해 주시기 바랍니다.
1.4.4. 실습 환경 설정하기
이 책에서는 Oracle 데이터베이스에서 제공하는 “HR” 데이터셋을 사용합니다. “HR” 데이터셋은 인적 자원(Human Resources) 관련 데이터로, 로컬에 저장된 CSV 파일을 활용하여 BigQuery 데이터셋을 생성합니다. “HR” 데이터셋은 Github에서 다운로드하실 수 있습니다.

- 탐색기의 “+추가” 버튼 클릭 후, 로컬 파일을 선택합니다.


- “새 데이터세트 만들기”를 선택하여 데이터셋을 생성합니다.
- 리전
- 특정 리전에 데이터셋이 저장됩니다.
- 데이터가 특정 지역적 규정 또는 규제 요건을 준수해야 하는 경우 사용할 수 있습니다.
- 데이터가 저장된 지역과 데이터를 사용하는 지역이 다를 경우, 과금 정책상 요금이 부과될 수 있습니다.
- 멀티 리전
- 데이터셋이 여러 리전에 복제되어 저장됩니다.
- 사용자가 데이터에 더 빠르게 액세스할 수 있고 센터 또는 지역에 장애가 발생하도 데이터 가용성이 유지되는 장점이 있습니다.


데이터 세트 ID
사용할 데이터셋명을 입력합니다.
이 책에서 사용하는 데이터셋 명은 “HR”로 설정했습니다.
위치 유형
이 책에서 위치 유형은 멀티 리전으로 설정했습니다.
테이블 만료 기간
데이터 보관 기간과 비용을 관리하기 위해 사용합니다. 데이터를 일정 기간 임시로 사용하거나 법적 요구 사항이 있는 경우 보관 기간을 관리하기 위해 사용할 수 있으며, 비용을 최적화하기 위해 사용할 수 있습니다.
이 책에서 테이블 만료 기간은 별도로 설정하지 않습니다.
- 생성한 데이터셋에 테이블 생성

파일 선택
“찾아보기” 버튼을 클릭하여 테이블로 생성할 파일을 선택합니다.
데이터 세트
2번 과정에서 생성한 데이터셋을 선택합니다.
스키마
“자동 감지” 기능을 선택하면 BigQuery는 데이터셋의 각 테이블 데이터에서 무작위 행을 샘플로 선택하여 각 열의 데이터 유형을 추론합니다.
“자동 감지” 기능을 선택하지 않을 경우, 아래 이미지와 같이 “필드 추가” 버튼을 클릭하여 스키마를 수동으로 제공해야 합니다.

혹은 “텍스트로 편집” 옵션을 선택하여 SQL 언어로 스키마를 수동으로 제공해야 합니다.

이 책에서는 스키마 “자동 감지” 기능을 사용했습니다.
- 생성한 테이블 확인
아래 이미지와 같이 탐색기를 보면, 생성한 데이터셋 내에 3번 과정에서 추가한 테이블이 생성된 것을 확인할 수 있습니다. 또한, 생성한 테이블을 클릭하면 이미지의 우측과 같이 테이블에 대한 정보를 확인할 수 있습니다.

- 스크립트 추가 및 쿼리 작성
- 작업 정보: 쿼리 작업에 대한 기본 정보
- 결과: 쿼리 결과를 테이블 형태로 표시
- JSON: 쿼리 결과를 JSON 형태로 표시
- 실행 세부정보: 쿼리 실행에 대한 자세한 세부 정보 제공
- 차트: 쿼리 결과를 이용하여 간단한 그래프 및 차트 생성
- 실행 그래프: 쿼리 실행 과정을 그래프로 표시
- 1번 과정에서 선택한 탭에 대한 결과를 출력합니다. 위의 이미지는 “결과”탭이 선택되어 쿼리 결과 테이블이 표시된 예시입니다.
- 쿼리 결과를 다양한 형식의 파일로 저장합니다.
- CSV(Google Drive or 로컬 파일)
- JSON
- JSONL
- BigQuery 테이블
- Google Sheets
- 클립보드에 복사
- 쿼리 결과를 분석 및 BI 도구에 연결하여 분석과 시각화를 할 수 있습니다.
- 스프레드시트
- Looker Studio (데이터 시각화 및 비즈니스 인텔리전스를 위한 Google의 엔터프라이즈 플랫폼)
- Python 노트북


1. 새 스크립트를 생성합니다.
2. SQL 쿼리를 작성하고 실행합니다.
3. 실행한 쿼리가 처리한 데이터 용량을 표시합니다.
4. 작성한 스크립트를 프로젝트에 저장하고 관리합니다.


1. 쿼리 실행 결과에 따른 다양한 정보를 제공합니다.
분석 및 BI 도구를 활용하는 자세한 방법은 공식 문서를 참고해 주시기 바랍니다.
1.5. 부록
1.5.1. BigQuery 가격 책정
BigQuery는 두 가지 구성요소에 따라 가격 책정이 이루어집니다.
- 분석 가격 책정: SQL 쿼리, 사용자 정의 함수, 스크립트, DML(데이터 조작 언어) 및 DDL(데이터 정의 언어) 문을 실행할 때 발생하는 비용
- 스토리지 가격 책정: BigQuery에 업로드한 데이터를 보관하는 데 발생하는 비용
분석 가격 책정 모델
분석 가격 책정 모델은 두 가지 쿼리 실행 비용 모델을 제공합니다.
- 주문형 가격 책정: 각 쿼리에서 처리된 데이터 바이트에 대한 비용이 부과되며, 매월 최초 1TB의 쿼리 데이터 처리는 무료로 제공됩니다.
- 정액제: 쿼리 실행에 사용 가능한 처리 용량인 슬롯(가상 CPU)을 구매합니다. 슬롯의 요금제는 다음과 같습니다.
- 가변 슬롯(단기 약정): 60초 동안 약정합니다. 가변 슬롯은 장기 약정을 구입하기 전에 작업 부하 여부 등의 성능을 확인할 때 유용합니다.
- 월간 약정: 30일 동안 약정합니다.
- 연간 약정: 365일 동안 약정합니다.
스토리지 가격 책정 모델
스토리지 가격 책정 모델은 두 가지 쿼리 실행 비용 모델을 제공합니다. 매월 10GB의 스토리지는 무료로 제공됩니다.
- 활성 스토리지: 최근 90일 동안 수정된 모든 테이블 또는 테이블 파티션을 포함합니다.
- 장기 스토리지: 최근 90일 동안 수정되지 않은 모든 테이블 또는 테이블 파티션을 포함합니다. 해당 테이블의 스토리지 비용은 약 50% 할인된 가격으로 자동 조정됩니다.
활성 스토리지와 장기 스토리지는 성능, 가용성, 내구성 측면에서 차이가 없습니다.
BigQuery의 가격 책정에 대한 자세한 내용은 공식 문서를 참고해 주시기 바랍니다.
1.5.2. BigQuery 스토리지
BigQuery 스토리지는 대규모 데이터셋의 분석 쿼리에 최적화되어 있습니다. 처리량이 높은 스트리밍 수집 및 읽기를 효율적으로 지원하여 워크로드 최적화에 도움이 됩니다.
스토리지와 컴퓨팅의 분리
BigQuery 아키텍처에서 중요한 특징은 스토리지와 컴퓨팅의 분리입니다. 이를 통해 BigQuery는 스토리지와 컴퓨팅을 독립적으로 확장할 수 있습니다.

쿼리 실행 시, BigQuery는 쿼리 엔진을 통해 여러 작업자에게 작업을 분산하여 스토리지에 저장된 데이터의 관련 부분을 동시에 처리합니다. 이때, 처리 결과를 효율적으로 수집하기 위해 페타바이트 네트워크를 활용하여 데이터를 빠르게 워커 노드로 이동시키고, 쿼리를 메모리에서 완전히 실행합니다.
다음은 BigQuery 스토리지의 몇 가지 주요 기능입니다.
- 관리형: BigQuery 스토리지는 완전 관리형 서비스로, 프로비저닝이나 용량 예약 없이 사용할 수 있습니다. 데이터를 시스템에 로드할 때 자동으로 스토리지를 할당하며, 비용은 실제 사용한 스토리지 용량에 대해서만 청구됩니다.
- 내구성: BigQuery 스토리지는 매우 높은 내구성을 제공합니다. 데이터를 여러 가용성 영역에 복제하여 머신 수준 또는 영역 수준의 장애로 인한 데이터 손실을 방지합니다.
- 암호화: BigQuery 스토리지는 데이터를 디스크에 기록하기 전에 자동으로 암호화하며, 사용자는 암호화 키를 직접 관리하거나 Google이 제공하는 암호화 키를 선택하여 사용할 수 있습니다.
- 효율적: BigQuery 스토리지는 데이터를 효율적으로 저장하고 처리하기 위해 분석 워크로드에 최적화된 데이터 인코딩 형식을 사용합니다.
스토리지 레이아웃
BigQuery는 데이터를 저장하는 방식이 일반적인 데이터베이스 시스템과 다릅니다.

- BigQuery의 데이터 저장 방식
BigQuery는 테이블 데이터를 열 기반으로 저장하여 각 열을 개별적으로 관리함으로써, 데이터셋에서 개별 열을 스캔하는 작업을 효율적으로 수행할 수 있습니다. 이는 분석 쿼리나 집계 작업과 같은 작업에 효과적이며, 예를 들어 대규모 데이터셋에서 수천만 개의 행의 열 합계를 계산할 때 BigQuery는 해당 열 데이터만 읽어 처리할 수 있습니다. 이러한 특성으로 인해 BigQuery는 OLAP 및 데이터 웨어하우스 워크로드에 적합한 데이터베이스입니다. 또한, 열 기반 데이터베이스에서는 유사한 데이터가 열에서 반복되므로 중복된 데이터를 효과적으로 압축하여 저장 공간을 절약할 수 있고, 이는 대규모 데이터의 효율적인 저장과 분석을 지원합니다.

- 일반적인 관계형 데이터베이스 시스템의 데이터 저장 방식
일반적인 데이터베이스 시스템은 데이터를 행 기반으로 저장합니다. 이에 따라 디스크에 각 행의 열이 연속적으로 저장되어 해당 행에 빠르게 접근할 수 있게 됩니다. 행이 함께 저장되며 각 행의 열이 디스크에 순차적으로 표시됩니다. 행 기반 데이터베이스는 각 행을 효율적으로 조회할 수 있지만, 행에 접근할 때 시스템이 모든 열을 읽어야 하므로 여러 행에서 데이터를 처리하는 것이 항상 효율적이지 않을 수 있습니다.

위 내용을 간략히 요약하여 표로 정리하였습니다.
빅쿼리와 다른 데이터베이스 시스템의 비교
항목 | BigQuery | 일반적인 관계형 데이터베이스 시스템 |
저장 방식 | 열 지향 저장 방식
- 열 단위 데이터 조회에 최적화 | 행 지향 저장 방식
- 행 단위 데이터 조회에 최적화 |
성능 | 필요한 열의 데이터만 읽을 수 있어 효율적일 수 있음 | 행 단위 데이터 조회 시 모든 열을 읽어야 하므로 비효율적일 수 있음 |
특징 | 대규모 데이터 압축 및 스캔 용이
OLAP 및 데이터 웨어하우스 워크로드에 적합 | 대량의 트랜잭션 처리에 적합
인덱스를 통한 데이터 처리에 최적화 |
데이터 테이블 최적화
데이터 테이블을 설계할 때 성능을 최적화하기 위한 방법은 다음과 같습니다.
- 파티션 나누기
데이터를 파티션 단위로 나눈 테이블을 사용하여 성능을 향상시킬 수 있습니다. 파티션 키는 정수 열, 시간 단위 열, 데이터를 수집한 시간 등이 될 수 있으며, 파티션을 나누어 데이터를 효율적으로 관리할 수 있습니다.
다음은 날짜 필드로 파티션을 나눈 테이블이며, 세 개의 파티션이 표시되어 있습니다. ”transaction_date”라는 열을 기반으로 일별 파티션 나누기를 사용하는 테이블을 확인할 수 있습니다.

데이터를 파티션으로 나누면, 쿼리가 필터와 일치하는 파티션만 스캔하고, 일치하지 않는 파티션은 건너뛸 수 있어서 쿼리 성능을 향상시킬 수 있습니다.
BigQuery가 지원하는 파티션 나누기에 대한 자세한 내용은 공식 문서를 참고해 주시기 바랍니다.
- 클러스터링
클러스터링은 특정 열의 값을 기준으로 데이터를 정렬하고 유사한 값들을 같은 위치에 배치하는 것입니다. 클러스터링 된 테이블 열의 최솟값 및 최댓값을 이용하여 데이터 정렬에 활용합니다.
다음은 ”customer_id”라는 열을 기준으로 클러스터링 된 테이블입니다.

클러스터링은 고유한 값이 많은 열이나, 범위가 작은 데이터를 한 번에 필터링하거나 집계하는 쿼리에 적합합니다.
BigQuery가 지원하는 클러스터링에 대한 자세한 내용은 공식 문서를 참고해 주시기 바랍니다.
- 클러스터링과 파티션 나누기 결합
데이터를 여러 파티션으로 나누고, 이를 다양한 열의 집합으로 클러스터링할 수 있습니다. 이때, 날짜 혹은 시간 등의 열을 기준으로 데이터를 파티션으로 나눌 수 있습니다. 각 파티션 내의 데이터는 기준이 되는 열에 따라 클러스터링 됩니다.
다음은 ”transaction_date” 열을 기준으로 데이터를 파티션으로 나누고, 각 파티션의 ”customer_id” 열을 기준으로 클러스터링 된 테이블입니다.

다른 데이터베이스 시스템과의 비교
- 관계형 데이터베이스 시스템 (예: Oracle Database, MySQL, PostgreSQL 등)
- 저장 방식: 테이블 형식을 사용하며, 각 테이블은 미리 정의된 스키마를 기반으로 한 행과 열로 구성됩니다.
- 장점: 데이터의 일관성, 무결성 및 관계를 효과적으로 유지하며, ACID 트랜잭션을 지원하여 데이터의 안정성을 보장합니다.
- 단점: 대규모 데이터 처리 및 복잡한 쿼리에 대한 성능이 떨어질 수 있습니다.
- NoSQL 데이터베이스 시스템 (예: MongoDB, Redis, Cassandra 등)
- 저장 방식: JSON 문서와 같은 단일 데이터 구조 내에 데이터를 보관합니다. 다양한 형태의 데이터 모델을 사용하며, 키-값, 그래프, 문서, 인메모리, 와이드-컬럼 등의 저장 방식이 있습니다.
- 장점: 확장성이 뛰어나고 대용량 데이터 처리에 효율적입니다. 유연한 스키마로 다양한 데이터 형식을 저장할 수 있습니다.
- 단점: 데이터의 일관성을 보장하기 어려울 수 있으며, ACID 트랜잭션을 완전히 지원하지 않을 수 있습니다.
- 파일 시스템 (예: HDFS, Amazon S3)
- 저장 방식: 파일 형식으로 데이터를 저장하며, 파일 시스템의 디렉토리 구조를 사용하여 데이터를 관리합니다.
- 장점: 대용량 데이터를 효과적으로 처리하고 저장할 수 있으며, 분산 파일 시스템을 활용하여 고가용성과 내결함성을 제공합니다.
- 단점: 파일 시스템은 일반적으로 데이터를 계층적인 디렉터리 구조로 저장하기 때문에 데이터에 대한 유연한 구조를 정의하거나 관리하기가 어려울 수 있으며, 여러 사용자에 의한 동시 액세스를 효과적으로 제어하지 못할 수 있습니다.