빅쿼리(BigQuery)는 구글의 강력한 분석형 데이터 웨어하우스로, 대용량 데이터를 빠르게 분석할 수 있는 기능을 제공합니다. 하지만 빅쿼리를 잘 활용하려면 데이터를 어떻게 효율적으로 업로드하느냐가 핵심입니다.
이번 포스트에서는 파이썬을 사용해 데이터를 Google BigQuery로 업로드하는 다양한 방법을 비교 분석합니다. 사용 목적, 데이터 크기, 자동화 요구사항에 따라 어떤 방식을 선택해야 할지 감 잡을 수 있을 겁니다.
1. Pandas + to_gbq()
파이썬에서 데이터를 다룰때 많이 사용하는 모듈인 pandas를 사용할 경우, pandas_gbq 모듈을 사용하여 데이터프레임을 쉽게 구글 빅쿼리로 로드할 수 있습니다. 방법은 아래와 같습니다.
📦 설치
pip install pandas-gbq |
🔧 사용 예시
from pandas_gbq import to_gbq import pandas as pd df: pd.DataFrame to_gbq( df, destination_table=“project.dataset.table”, project_id=“project_id”, if_exists=“replace”, # fail | replace | append table_schema={“column”, “dtype”}, # 테이블 스키마 명시, 기본 데이터프레임 컬럼 타입에 따라 자동 생성 chunksize=1000, # 로드 청크사이즈, 데이터가 클 경우 나눌 청크 크기를 설정 ) |
2. google-cloud-bigquery 클라이언트 라이브러리
📦 설치
pip install google-cloud-bigquery |
🔧 사용 예시: DataFrame 직접 업로드
from google.cloud import bigquery import pandas as pd df: pd.DataFrame client = bigquery.Client() job = client.load_table_from_dataframe(df, “project.dataset.table”) job.result() |
🔧 사용 예시: 파일에서 직접 업로드
from google.cloud import bigquery client = bigquery.Client() job_config = bigquery.LoadJobConfig(source_format=bigquery.SourceFormat.CSV) with open(“data.csv”, “rb”) as f: client.load_table_from_file(f, “project.dataset.table”, job_config=job_config).result() |
👍 장점
다양한 데이터 소스 지원 (DataFrame, CSV, JSON, GCS 등)
세부 설정 가능: 파티셔닝, 스키마 지정 등
👎 단점
코드 복잡
설정 많음
위 소개드린 두 방법 외에 client 인스턴스 내 여러 메소드및 옵션이 더 있습니다.
공식 구글 빅쿼리 SDK의 경우 설정이 복잡하고 많은 만큼 세세한 조정이 가능합니다.
복잡한 데이터 로드 워크플로에서 사용하기 좋습니다.
3. GCS → BigQuery 로딩
📦 설치
pip install google-cloud-storage google-cloud-bigquery |
🔧 사용 예시
from google.cloud import storage, bigquery # 1. GCS에 데이터 업로드 storage_client = storage.Client() bucket = storage_client.bucket(“bucket”) blob = bucket.blob(“data.csv”) blob.upload_from_filename(“data.csv”) # 2. GCS 데이터를 빅쿼리로 로드 bq_client = bigquery.Client() job_config = bigquery.LoadJobConfig( source_format=bigquery.SourceFormat.CSV, autodetect=True ) job = bq_client.load_table_from_uri( “gs://bucket/data.csv”, “project.dataset.table”, job_config=job_config ) job.result() |
👍 장점
대용량 데이터 처리에 적합
실패 시 재시도 용이
데이터 스테이징 가능
👎 단점
GCS 버킷 설정 필요
코드 길고 번거로움
데이터가 아주 큰 대용량 데이터의 경우 파일로 저장한 후 GCS에 업로드 하여 업로드한 데이터 파일을 구글 빅쿼리로 로드하는 방법이 안정적입니다.
위 2번 방식과 마찬가지로 JobConfig를 통해 로드 상세 설정이 가능하며 그에 더해 안정성을 확보한 방식입니다.
파이썬에서 데이터를 구글 빅쿼리로 로드하는 세 가지 방식에 대해 알아보았습니다,
어떤 방식을 사용할 지는 데이터의 크기나 파티셔닝, 스키마의 상세 지정의 필요 유무에 따라 알맞은 방식을 선택할 수 있겠습니다.