前提

・GCPのアカウントが準備できていること
・BigQueryに接続可能なtableが存在すること

実行環境の準備

ec2
-pyenv
-naconda3-4.0.0
-pandas
-httplib2
-google-api-python-client

モジュール追加

sudo su -
pyenv global naconda3-4.0.0
pip install httplib2
pip install google-api-python-client

GoogleCloudSDKの導入(python2.x環境で実行)と認証

pyenv global system
curl https://sdk.cloud.google.com | bash
~/google-cloud-sdk/bin/gcloud auth login

※認証情報は~/.config配下に出力される

ごく少ないレコードのテーブルで実行

import pandas as pd
query = 'SELECT * FROM dataset_name.table_name'
pd.read_gbq(query, 'your_project_ID')

→pd.read_gbqで認証が走るが、EC2が実行元となるため、
 localhostでリスンする認証用URLがうまく受け取れない

Oauth2での認証情報生成

from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
flow = OAuth2WebServerFlow(client_id='your_client_id',
                           client_secret='your_client_secret',
                           scope='https://www.googleapis.com/auth/bigquery',
                           redirect_uri='urn:ietf:wg:oauth:2.0:oob')
storage = Storage('bigquery_credentials.dat')
authorize_url = flow.step1_get_authorize_url()
print 'Go to the following link in your browser: ' + authorize_url
code = raw_input('Enter verification code: ')
credentials = flow.step2_exchange(code)
storage.put(credentials)

※your_client_id、your_client_sercretは~/.config配下から

上記処理実行後、カレントディレクトリに「bigquery_credentials.dat」が作成される。
→pandas.read_gbqは上記を認証情報として利用

ごく少ないレコードのテーブルで実行

import pandas as pd
query = 'SELECT * FROM dataset_name.table_name'
pd.read_gbq(query, 'your_project_ID')

参考

https://developers.google.com/api-client-library/python/guide/aaa_oauth
http://stackoverflow.com/questions/37792709/accessing-big-query-from-cloud-datalab-using-pandas

TOP