핵심 요약
BigQuery DataFrames(bigframes 2.0) 12주 production 사용. pandas API로 BQ 테이블 직접 조작, 데이터 로컬 다운로드 없이 ML 학습. ETL 코드 -64%, 학습 데이터 이동 시간 0.
1. 사용 — pandas 그대로
import bigframes.pandas as bpd
df = bpd.read_gbq('project.dataset.orders')
# pandas 그대로 — 실제로는 BQ SQL로 변환되어 실행
df_us = df[df['country'] == 'US']
agg = df_us.groupby('product_id')['amount'].sum().sort_values(ascending=False)
print(agg.head(10).to_pandas()) # 결과만 로컬로
2. ML — BQ ML과 통합
from bigframes.ml.linear_model import LinearRegression
model = LinearRegression()
model.fit(df[['feat1', 'feat2']], df['target'])
preds = model.predict(test_df)
# 학습은 BQ 안에서 — 데이터 이동 0
3. 실측 — 12B row 데이터셋
| 방식 | 소요 시간 | 비용 |
|---|---|---|
| pandas 로컬(GCS 다운로드) | 42분 | $28 |
| Spark on Dataproc | 18분 | $12 |
| bigframes | 8분 | $4.2 |
4. Snowpark 대비
Snowpark는 Snowflake 사용자 친화. bigframes는 BigQuery 사용자에게 동일. 둘 다 SQL 자동 생성. 데이터 거주성·기존 인프라가 결정 요소.
5. 함정
- pandas API 호환 — 80%, 일부 메서드 미지원(applymap, eval). NotImplementedError 발생 시 SQL 직접 작성
- BQ slot 사용량 — 큰 join 시 slot 폭증, on-demand vs reservation 사전 검토
- 로컬 .to_pandas() — 큰 데이터 로컬 전송 시 OOM, head/sample 후 .to_pandas()
- 순서 보장 — pandas는 index 보장, bigframes는 BigQuery 분산 실행이라 order by 명시 필요

댓글 0