일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자료의요약
- 게임분석
- anomaly detection
- 오토인코더
- 게임 데이터분석
- 데이터 분석
- 유저이탈
- LTV예측
- 기초통계학
- self-similarity
- LTV
- 이상탐지
- dacon
- Kaggle
- 딥러닝
- PYTHON
- 데이터분석
- anomaly
- 통계학
- 게임
- 대회
- 자기유사도
- 봇탐지
- 사례
- google.oauth2
- google.cloud
- AutoEncoder
- AE
- Detection
- 게임 이탈 분석
- Today
- Total
사쿠의 데이터 블로그
Python에서 Bigquery 연동하기 본문
목차
- Credential 파일 준비
- python 연동
- 연동 및 테이블 불러오기
- 테이블 입력하기 및 수정
Credential 파일을 하나로 관리하는 이유
현재, 재직중인 회사에서는 Bigquery를 분석용 DB로 이용하고 있다. 나는 엔지니어링 팀은 아니지만 옆에서 귀동냥으로 배운 내용들이 있어서 정리해두려고 한다. (실제로 DB 담당자와 함께 고민을 했다!)
먼저 회사는 프로젝트(=Bigquery Project)마다 독립된 내용을 담아둔다. 예를 들어, 게임 회사라면 A 게임, B 게임을 각각의 프로젝트라고 보는 것이다. 그리고 접근할 수 있는 인증키(=Credential Key)가 부여되어서 Python에서 데이터를 불러올 수 있다.
그런데 전에는 프로젝트마다 인증키를 만들고 관리했던적이 있었는데, 분석팀 인원이 점점 늘어나고, 프로젝트 숫자가 늘어나면서 관리해야 될 인증키 발급하는 게 또 하나의 업무가 돼버린 것이다. --> 프로젝트가 10개라면... 신규 입사자가 오면 10개의 인증키를 발급하고, 누군가 퇴사하면 10개의 인증키를 삭제하는 것이다
이런 방식은 사용자도 불편함을 느낀다. 쿼리를 하다보면 프로젝트를 넘나드는 경우가 왕왕 생기는데 그때마다 맞는 인증키를 가지고 테이블을 불러오는 것이 매우 귀찮은 일이다. (신규 프로젝트 생성시 한번만 세팅하면 되지만 그것도 너무 귀찮다!!)
Bigquery 이용 초반에는 별 문제 없었지만 현재는 매우 비 효율적인 방식을 바꿔보려고 담당자님과 고민을 하다가 인증키를 하나로 묶어서 관리하면 될 것 같다는 결론을 얻었고 공식 홈페이지에서 답을 찾아, 회사 전반적인 관리 프로세스를 변경했다. (Bigquery Role에 대한 자세한 내용은 아래 링크를 참조 바람)
변경 후, 인증키 관리는 인당 하나씩 부여하는 것으로 마쳤고 신규 입사자 혹은 퇴사자 발생 시 한개의 인증키만 관리하면 되어서 훨씬 수월해 지게 되었다.
Python <-> Bigquery 연동
from google.oauth2 import service_account
from google.cloud import bigquery
credential_path = '크레덴셜 키 위치'
credentials = service_account.Credentials.from_service_account_file(credential_path)
client = bigquery.Client(credentials=credentials, project='프로젝트 명')
query = '''
select '컬럼'
from 'table'
'''
job = client.query(query) # API request
result = job.result() # 정상 실행 확인
df = job.to_dataframe() #Bigquery에서 가져온 내용을 pandas로 변경
result.total_rows # 가져온 테이블 rows 수 확인
인증 키가 준비 되었으면 client 객체를 생성해 Bigquery를 이용할 준비를 마친다.
조회하고 싶은 쿼리가 있다면 작성한 뒤, query 에 해당 쿼리를 날려 정보를 받아온 뒤, Python에서 이용할 수 있도록 pandas화 시킨다. 위 방법으로 간단한 DML (update, delete, insert, select)은 가능하다!
내가 Bigquery를 이용할 때 보통 위 코드를 기본 세팅으로 두고 업무를 시작할 때가 많다. 물론 다양한 활용 방법이 많이 있지만 이번에는 이정도로만 정리 해보려 한다.
참조:
https://cloud.google.com/bigquery/docs/samples/bigquery-query-results-dataframe
'Python(데이터 분석, 딥러닝)' 카테고리의 다른 글
변수 중요도 측정 - Permutation importance (0) | 2019.10.27 |
---|---|
Anomaly Detection with AE (2) (0) | 2019.05.26 |
Anomaly Detection with AE (1) (1) | 2019.05.25 |
Auto Encoder(개념) (1) | 2019.05.25 |
Pytorch 설치 (0) | 2019.05.19 |