본문 바로가기
Python

Python BigQuery 연동하기 - 에러 해결방법

by yu901 2024. 2. 12.

구글링하며 python에서 빅쿼리 데이터 사용하기 시도중 겪은 에러들

 

 

빅쿼리에 프로젝트-테이블도 만들고,

 

 

 

'API 및 서비스-사용자 인증 정보' 에서 서비스 계정 만들고, 

키(.json) 파일도 다운받았다.

 

 

 

그리고 python에서 아래 코드를 돌리면, 테이블이 dataframe 형태로 나와야 한다.

import glob
from google.cloud import bigquery
from google.oauth2 import service_account

# 서비스 계정 키 JSON 파일 경로
key_path = glob.glob("../config/*.json")[0]

# Credentials 객체 생성
credentials = service_account.Credentials.from_service_account_file(key_path)

# GCP 클라이언트 객체 생성
client = bigquery.Client(credentials = credentials, 
                         project = credentials.project_id)

# 데이터 조회 쿼리
sql = f"""
SELECT *
FROM data-analysis-413914.kobis.daily_box_office
"""

# 데이터 조회 쿼리 실행 결과
query_job = client.query(sql)

# 데이터프레임 변환
df = query_job.to_dataframe()
df.head()

 

 

하지만 총 3개의 error를 맛보고 겨우겨우 정상적으로 돌렸다...

같은 어려움을 겪고 있을지도 모르는 사람에게 error 해결방법을 공유하고자 이 글을 작성한다.

 


1. request is missing required authentication credential

request is missing required authentication credential. expected oauth 2 access token, login cookie or other valid authentication credential.

 

인증 자격 증명이 누락되었다는 에러

 

 

 ‘IAM’ -> 엑세스 권한 부여 -> API KEY의 client_email 입력 -> 역할(BigQuery 관리자) 선택후 저장

하면 error 해결!

 

참고자료: https://velog.io/@suminwooo/빅쿼리-파이썬-연동1

 

 

2. Unexpected string literal

BadRequest: 400 Syntax error: Unexpected string literal 'data-analysis-413914.kobis.daily_box_office' at [3:6]

 

예상치 못한 문자 에러

 

이 에러는 쿼리를 아래와 같이 작성할 때 발생한다.

# error sql
sql = f"""
SELECT *
FROM 'data-analysis-413914.kobis.daily_box_office'
"""

 

 

single quote(')를 사용하지 말고 backticks(`)를 사용할 것

아니면 테이블 명을 따로 감싸지 않아도 된다.

sql = f"""
SELECT *
FROM `data-analysis-413914.kobis.daily_box_office`
"""

sql = f"""
SELECT *
FROM data-analysis-413914.kobis.daily_box_office
"""

 

참고자료: https://sql.info/d/bigquery-syntax-error-unexpected-string-literal-dataset-table-at-position

 

 

3. 'db-dtypes' package

ValueError: Please install the 'db-dtypes' package to use this function.

db-dtypes 패키지가 필요하다는 에러

 

에러를 맞이하고, 일단 'query_job = client.query(sql)' 코드는 넘겼다는 기쁨과

단순히 pip install db-dtypes만 하면 될거라는 방심

 

하지만 안되죠?

 

구글링해보니 동일한 오류가 google-cloud-bigquery v3.0.0 이상부터 발생한다고...

패키지 삭제 후, 2.34.1 버전으로 재설치

> pip install google-cloud-bigquery==2.34.1

 

 

참고자료: https://github.com/feast-dev/feast/issues/2537

 


 

 

드디어 나오는 데이터프레임!!!

 

 

 

이제 본격적으로 빅쿼리 써야지...후후

댓글