Google BigQuery는 서버리스 클라우드 데이터 웨어하우스로, 페타바이트 규모의 데이터를 표준 SQL로 초고속 분석한다. 스토리지와 컴퓨팅을 분리해 대용량 쿼리를 수초~수분 내 처리한다.
핵심 특징
컬럼형 스토리지: 쿼리에 필요한 열만 읽음 (비용·속도 최적)
서버리스: 인프라 관리 불필요, 쿼리 실행량 과금
분산 처리: Dremel 엔진, 수천 노드 병렬 처리
스트리밍 인제스트: 실시간 데이터 수집
ML 통합: BigQuery ML로 SQL로 모델 훈련
SQL 쿼리
sql
-- 일별 매출 집계
SELECT
DATE(created_at) AS order_date,
COUNT(*) AS order_count,
SUM(total_amount) AS revenue,
AVG(total_amount) AS avg_order_value,
APPROX_QUANTILES(total_amount, 100)[OFFSET(99)] AS p99_amount
FROM `myproject.ecommerce.orders`
WHERE created_at >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND status = 'completed'
GROUP BY 1
ORDER BY 1 DESC;
-- 파티션 테이블 활용 (비용 최적화)
CREATE TABLE IF NOT EXISTS `myproject.analytics.events`
PARTITION BY DATE(event_time)
CLUSTER BY user_id, event_type
AS SELECT * FROM source_events;
python
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT user_id, COUNT(*) as sessions
FROM `myproject.analytics.sessions`
WHERE DATE(created_at) = CURRENT_DATE()
GROUP BY user_id
HAVING sessions > 5
"""
df = client.query(query).to_dataframe()
print(df.head())
관련 개념